سؤال

هل هناك أداة أو برنامج نصي يدمج بسهولة مجموعة من إناء الملفات في ملف 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

يبدو مثل نملة أباتشي هو ما تبحث عنه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top