أسهل طريقة لدمج إصدار في ملف JAR واحد
-
09-06-2019 - |
سؤال
هل هناك أداة أو برنامج نصي يدمج بسهولة مجموعة من إناء الملفات في ملف JAR واحد؟ستكون المكافأة هي تعيين بيان الملف الرئيسي بسهولة وجعله قابلاً للتنفيذ.
الحالة الملموسة هي أ أداة نصية مُعاد هيكلتها لـ Java.أرغب في تشغيله بشيء مثل:
جافا -jar rst.jar
بقدر ما أستطيع أن أقول، ليس لديها أي تبعيات مما يشير إلى أنها لا ينبغي أن تكون أداة سهلة للملف الواحد، ولكن ملف ZIP الذي تم تنزيله يحتوي على الكثير من المكتبات.
0 11-30-07 10:01 jrst-0.8.1/
922 11-30-07 09:53 jrst-0.8.1/jrst.bat
898 11-30-07 09:53 jrst-0.8.1/jrst.sh
2675 11-30-07 09:42 jrst-0.8.1/readmeEN.txt
108821 11-30-07 09:59 jrst-0.8.1/jrst-0.8.1.jar
2675 11-30-07 09:42 jrst-0.8.1/readme.txt
0 11-30-07 10:01 jrst-0.8.1/lib/
81508 11-30-07 09:49 jrst-0.8.1/lib/batik-util-1.6-1.jar
2450757 11-30-07 09:49 jrst-0.8.1/lib/icu4j-2.6.1.jar
559366 11-30-07 09:49 jrst-0.8.1/lib/commons-collections-3.1.jar
83613 11-30-07 09:49 jrst-0.8.1/lib/commons-io-1.3.1.jar
207723 11-30-07 09:49 jrst-0.8.1/lib/commons-lang-2.1.jar
52915 11-30-07 09:49 jrst-0.8.1/lib/commons-logging-1.1.jar
260172 11-30-07 09:49 jrst-0.8.1/lib/commons-primitives-1.0.jar
313898 11-30-07 09:49 jrst-0.8.1/lib/dom4j-1.6.1.jar
1994150 11-30-07 09:49 jrst-0.8.1/lib/fop-0.93-jdk15.jar
55147 11-30-07 09:49 jrst-0.8.1/lib/activation-1.0.2.jar
355030 11-30-07 09:49 jrst-0.8.1/lib/mail-1.3.3.jar
77977 11-30-07 09:49 jrst-0.8.1/lib/servlet-api-2.3.jar
226915 11-30-07 09:49 jrst-0.8.1/lib/jaxen-1.1.1.jar
153253 11-30-07 09:49 jrst-0.8.1/lib/jdom-1.0.jar
50789 11-30-07 09:49 jrst-0.8.1/lib/jewelcli-0.41.jar
324952 11-30-07 09:49 jrst-0.8.1/lib/looks-1.2.2.jar
121070 11-30-07 09:49 jrst-0.8.1/lib/junit-3.8.1.jar
358085 11-30-07 09:49 jrst-0.8.1/lib/log4j-1.2.12.jar
72150 11-30-07 09:49 jrst-0.8.1/lib/logkit-1.0.1.jar
342897 11-30-07 09:49 jrst-0.8.1/lib/lutinwidget-0.9.jar
2160934 11-30-07 09:49 jrst-0.8.1/lib/docbook-xsl-nwalsh-1.71.1.jar
301249 11-30-07 09:49 jrst-0.8.1/lib/xmlgraphics-commons-1.1.jar
68610 11-30-07 09:49 jrst-0.8.1/lib/sdoc-0.5.0-beta.jar
3149655 11-30-07 09:49 jrst-0.8.1/lib/xalan-2.6.0.jar
1010675 11-30-07 09:49 jrst-0.8.1/lib/xercesImpl-2.6.2.jar
194205 11-30-07 09:49 jrst-0.8.1/lib/xml-apis-1.3.02.jar
78440 11-30-07 09:49 jrst-0.8.1/lib/xmlParserAPIs-2.0.2.jar
86249 11-30-07 09:49 jrst-0.8.1/lib/xmlunit-1.1.jar
108874 11-30-07 09:49 jrst-0.8.1/lib/xom-1.0.jar
63966 11-30-07 09:49 jrst-0.8.1/lib/avalon-framework-4.1.3.jar
138228 11-30-07 09:49 jrst-0.8.1/lib/batik-gui-util-1.6-1.jar
216394 11-30-07 09:49 jrst-0.8.1/lib/l2fprod-common-0.1.jar
121689 11-30-07 09:49 jrst-0.8.1/lib/lutinutil-0.26.jar
76687 11-30-07 09:49 jrst-0.8.1/lib/batik-ext-1.6-1.jar
124724 11-30-07 09:49 jrst-0.8.1/lib/xmlParserAPIs-2.6.2.jar
كما ترون، من المستحسن إلى حد ما ألا تحتاج إلى القيام بذلك يدويًا.
لقد قمت حتى الآن بتجربة AutoJar وProGuard فقط، وكلاهما كان من السهل تشغيلهما إلى حد ما.يبدو أن هناك مشكلة ما في التجمع الثابت في ملفات JAR.
من الواضح أن jrst مكسور قليلاً، لذا سأحاول إصلاحه.ال مخضرم pom.xml
يبدو أن الملف معطل أيضًا، لذا سيتعين علي إصلاح ذلك قبل إصلاح jrst ...أشعر وكأنني مغناطيس للحشرات :-)
تحديث:لم أتمكن مطلقًا من إصلاح هذا التطبيق، لكنني قمت بسحبه كسوف"معالج تصدير JAR القابل للتشغيل" والذي يعتمد على JAR سمين.لقد وجدت أن هذا سهل الاستخدام للغاية لنشر الكود الخاص بي.
قد تكون بعض الاقتراحات الممتازة الأخرى أفضل للإنشاءات في بيئة غير Eclipse، ومن المحتمل أن يقوم نظام التشغيل oss بإنشاء بناء جيد باستخدام نملة.(مافن، لقد سببت لي الألم حتى الآن، لكن الآخرين يحبون ذلك.)
المحلول
Eclipse 3.4 معالج تصدير JAR القابل للتشغيل الخاص بـ JDT.
في Eclipse 3.5، تم توسيع هذا.يمكنك الآن اختيار الطريقة التي تريد بها التعامل مع ملفات JAR المشار إليها.
نصائح أخرى
النمل zipfileset
لا وظيفة
<jar id="files" jarfile="all.jar">
<zipfileset src="first.jar" includes="**/*.java **/*.class"/>
<zipfileset src="second.jar" includes="**/*.java **/*.class"/>
</jar>
بعد تجربة بعض الحلول المختلفة، وجدت جرة واحدة الأسهل في العمل، وقد تمكنت من القيام بذلك بالضبط:إنتاج JAR واحد قابل للتنفيذ يحتوي على كل ما أحتاجه.
يستخدم One-JAR أداة تحميل فئة مخصصة يمكنها التنقل بين الموارد المتداخلة.انظر إلى ملف .bat في التنزيل، يبدو أن org.codelutin.jrst.JRST في jrst-0.8.1.jar هي الفئة الرئيسية، لذلك يجب أن يبدو البيان الخاص بك كما يلي:
Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: org.codelutin.jrst.JRST
الشيء الرائع حقًا هو أن One-JAR سيتولى تمرير وسيطات سطر الأوامر نيابةً عنك.تتم معالجة مسار الفصل بواسطة أداة تحميل الفئة المخصصة، على افتراض أن جميع الموارد التي تحتاجها مجمعة في ملف JAR واحد.
أسهل طريقة لاستخدام One-JAR هي باستخدام النملة؛هناك مهمة نملة مخصصة "لجرة واحدة" تعمل على النحو التالي (بافتراض أن البيان الخاص بك يسمى "rst.mf"):
<target name="jar-rst">
<one-jar destfile="rst.jar" manifest="rst.mf">
<main jar="jrst-0.8.1.jar" />
<lib>
<fileset dir="${pathToJars}">
<include name="batik-util-1.6-1.jar" />
<include name="icu4j-2.6.1.jar" />
<include name="commons-collections-3.1.jar" />
<!-- Snip -->
</fileset>
</lib>
</one-jar>
</target>
إذا كنت مخضرم المستخدم، عادةً ما يقوم المكون الإضافي للتجميع بما تريد، أو من المحتمل أن يكون المكون الإضافي للظل، وفي بعض الحالات مزيجًا.
باستخدام ملحق التجميع، يمكنك وضع ملف بيان في مشروعك مع أي إعدادات ضرورية، على الرغم من أن الإعدادات الافتراضية عادة ما تكون جيدة جدًا.ثم يتم البناء مع
mvn assembly:assembly
أو إذا كان لديك أشياء أكثر خصوصية للتعامل معها، أحد الأهداف الأخرى.يتم التقاط جميع ملفات JAR التي سيتم تضمينها بواسطة محلل التبعية الخاص بـ Maven.إذا كنت تستخدم المكون الإضافي للظل، فهو عادةً ما يكون جزءًا من هدف التثبيت، وفي أحد المشاريع المحددة التي أقوم بها الآن أفعل ذلك
mvn install
mvn assembly:single
ال assembly:single
الهدف هو التغلب على مشكلات مدى الحياة، في هذه الحالة في ربيع طلب.
يمكنك استخدام جارجار والتي ستستخدم تظليل الحزمة للتأكد من أن ملف JAR الخاص بك لا يتعارض مع الملفات الأخرى.
هنالك بروجارد الذي لا يجمع ملفات JAR الخاصة بك في ملف واحد فحسب، بل يمكنه أيضًا تحسين ملفات صفك أو تنظيفها أو التعتيم عليها، مما يجعل ملف JAR الناتج أصغر بكثير من مجموع جميع ملفات JAR السابقة.
لقد قمت بالفعل بتجربة ProGuard باستخدام أداة JRST، وكان الأمر كما ذكرت.حاولت تتبع المشكلة ووجدت أنها مرتبطة بها حشرة في مكتبة ICU4J المشار إليها بواسطة jrst.المشكلة هي أن إصدار وحدة العناية المركزة المستخدم قديم جدًا في الوقت الحالي.لذلك استبدلت icu.jar
الملف مع ICU4J الإصدار 3.2.يجد ProGuard الآن مجموعة من الأخطاء/التحذيرات الأخرى حول حالات عدم الاتساق مع مكتبات JRST.
أعتقد أن ProGuard يعمل كما هو متوقع، لكن مكتبات jrst ليست متسقة.لا أعرف ما إذا كان بإمكانك فعل أكثر من مجرد التحدث مع مطوريه حيث يتعين عليهم التحقق من تبعيات المشروع وتحديثها.
(استنادًا إلى أندريان):
<jar id="files" jarfile="all.jar">
<zipgroupfileset dir="${library.dir}" includes="*.jar" excludes="test-helper.jar"/>
<zipfileset src="first.jar" includes="**/*.java **/*.class"/>
<zipfileset src="second.jar" includes="**/*.java **/*.class"/>
<fileset dir=".">
<include name="LICENSE"/>
<include name="NOTICE"/>
</fileset>
</jar>
تم إصدار One-JAR 0.97 للتو في http://one-jar.sourceforge.net, ، وقد تم تمديده مع دعم أطر مثل ربيع و غيس, ، الأمر الذي قد يمثل مشكلة للطرق الأخرى.كما أنه يعالج أيضًا انعكاس أداة تحميل الفئة - حيث تكون بعض ملفات JAR خارجية لـ One-JAR (على سبيل المثال، JDBC برامج التشغيل التي قد لا يتم شحنها مجمعة).
One-JAR هو سطر الأوامر، مع نملة و مخضرم 2 ملحقات.من السهل أيضًا البناء باستخدام أداة "jar".
يمكنني أيضًا أن أوصي بـ Eclipse Jar Exporter (Runnable) الذي كتب عنه Ference Hechler:لقد قام بعمل رائع في التوصل إلى طريقة بسيطة لتغليف مجموعة من ملفات JAR.لقد عملنا أنا وهو على One-JAR، لكن Jar Exporter يعتمد على قاعدة تعليمات برمجية مختلفة.
هناك أداة تسمى com.autojar والذي سيقوم بفحص الكود الثانوي الخاص بك وتجميع ملف .jar مع الفئات التي يجدها، بما في ذلك الفئات المشار إليها (المستوردة).
لا يعمل دائمًا مع شيء مثل Spring، حيث تحدد أسماء الفئات في التكوين ويتم تحميلها بواسطة إطار العمل.
أو باستخدام البرنامج المساعد لتجميع Maven (mvn Assembly:assembly)
أعتقد أن الأداة التي تحتاجها هنا هي جارسبليس: http://ninjacave.com/jarsplice
نعم هو كذلك لا تتطلب Ant أو Maven، ولها واجهة المستخدم الرسومية الخاصة بها، وهي سهلة الاستخدام وتفعل ما طلبته بالضبط --> يقوم بدمج محتوى عدة ملفات jar في ملف واحد (يرجى ملاحظة أنه لا يزال بحاجة إلى إضافة أداة تحميل الفصل الخاصة به).
يجب عليك استخدام البرنامج المساعد maven Shading للقيام بذلك.غالبًا ما أستخدم maven لإنشاء ملف jar مستقل وهو قوي جدًا
شاهد المزيد:
http://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html
يبدو مثل نملة أباتشي هو ما تبحث عنه.