it-swarm-id.com

Cara termudah untuk menggabungkan rilis menjadi satu file JAR

Apakah ada alat atau skrip yang dengan mudah menggabungkan sekelompok JAR file menjadi satu file JAR? Bonus akan dengan mudah mengatur manifes file-utama dan membuatnya dapat dieksekusi.

Kasus konkret adalah Java alat teks direstrukturisasi . Saya ingin menjalankannya dengan sesuatu seperti:

Java -jar rst.jar

Sejauh yang saya tahu, itu tidak memiliki dependensi yang menunjukkan bahwa itu seharusnya bukan alat file tunggal yang mudah, tetapi file Zip yang diunduh berisi banyak perpustakaan.

      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

Seperti yang Anda lihat, agak diinginkan untuk tidak perlu melakukan ini secara manual.

Sejauh ini saya hanya mencoba AutoJar dan ProGuard, yang keduanya cukup mudah dijalankan. Tampaknya ada beberapa masalah dengan kumpulan konstan dalam file JAR.

Rupanya pertama kali sedikit rusak, jadi saya akan memperbaikinya. File Mavenpom.xml rupanya rusak juga, jadi saya harus memperbaikinya sebelum memperbaiki yang pertama ... Saya merasa seperti magnet-bug :-)


Pembaruan: Saya tidak pernah sempat memperbaiki aplikasi ini, tapi saya memeriksa Eclipse "Runnable JAR export wizard" yang didasarkan pada JAR yang gemuk. Saya menemukan ini sangat mudah digunakan untuk menggunakan kode saya sendiri.

Beberapa saran bagus lainnya mungkin lebih baik untuk bangunan di lingkungan non-Eclipse, oss mungkin harus membuat bangunan yang bagus menggunakan Ant . (Maven, sejauh ini baru saja memberi saya rasa sakit, tetapi yang lain menyukainya.)

70
tovare

Wisaya ekspor JAR Runnable JAR Eclipse 3.4 JDT.

Di Eclipse 3.5, ini telah diperpanjang. Sekarang Anda dapat memilih bagaimana Anda ingin memperlakukan file JAR yang dirujuk.

33
Stephen Denne

zipfileset semut melakukan pekerjaan

<jar id="files" jarfile="all.jar">
    <zipfileset src="first.jar" includes="**/*.Java **/*.class"/>
    <zipfileset src="second.jar" includes="**/*.Java **/*.class"/>
</jar>
62
akuhn

Setelah mencoba beberapa solusi berbeda, saya menemukan One-JAR yang paling mudah untuk dikerjakan, dan telah berhasil melakukan hal itu: menghasilkan satu, JAR yang dapat dieksekusi yang berisi semua yang saya butuhkan.

One-JAR menggunakan pemuat kelas khusus yang dapat menavigasi sumber daya bersarang. Lihatlah file .bat di unduhan, sepertinya org.codelutin.jrst.JRST di jrst-0.8.1.jar adalah kelas utama, jadi manifes Anda akan terlihat seperti ini:

Main-Class: com.simontuffs.onejar.Boot
One-Jar-Main-Class: org.codelutin.jrst.JRST

Yang sangat keren adalah bahwa One-JAR akan menangani meneruskan argumen baris perintah untuk Anda. Classpath ditangani oleh loader kelas kustom, dengan asumsi semua sumber daya yang Anda butuhkan digabungkan ke dalam JAR tunggal.

Cara termudah untuk menggunakan One-JAR adalah dengan semut; ada tugas semut "one-jar" khusus yang berfungsi sebagai berikut (dengan asumsi manifes Anda disebut "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>
27
Ashley Mercer

Jika Anda pengguna Maven , biasanya plugin Majelis melakukan apa yang Anda inginkan, atau berpotensi sebagai plugin teduh, dan dalam beberapa kasus kombinasi.

Dengan plugin Assembly Anda meletakkan file manifes di proyek Anda dengan pengaturan yang diperlukan, meskipun standarnya biasanya cukup baik. Bangunan kemudian dilakukan dengan

mvn Assembly:assembly

Atau jika Anda memiliki lebih banyak hal khusus untuk ditangani, salah satu tujuan lainnya. Semua file JAR untuk disertakan, diambil oleh penyelesai ketergantungan Maven. Jika Anda menggunakan plugin teduh, itu biasanya bagian dari tujuan instal, dan dalam satu proyek tertentu yang saya lakukan sekarang saya lakukan

mvn install
mvn Assembly:single

Tujuan Assembly:single adalah untuk mengatasi masalah seumur hidup, dalam hal ini di Spring aplikasi.

14
larsivi

Anda dapat menggunakan JarJar yang akan menggunakan paket shadowing untuk memastikan file JAR Anda tidak bertentangan dengan yang lain.

8
Steve g

Ada ProGuard yang tidak hanya mengemas file JAR Anda menjadi satu, tetapi juga dapat mengoptimalkan, membersihkan atau mengaburkan file kelas Anda, membuat file JAR yang dihasilkan jauh lebih kecil daripada jumlah semua file JAR sebelumnya.

Saya sebenarnya mencoba ProGuard dengan alat JRST, dan seperti yang Anda laporkan. Saya mencoba melacak masalahnya dan menemukan itu terkait dengan bug di perpustakaan ICU4J yang dirujuk oleh jrst. Masalahnya adalah, versi ICU yang digunakan sudah ketinggalan zaman sekarang. Jadi saya mengganti file icu.jar dengan ICU4J versi 3.2. Sekarang ProGuard menemukan banyak kesalahan/peringatan lain tentang ketidaksesuaian dengan perpustakaan JRST.

Dugaan saya adalah ProGuard berfungsi seperti yang diharapkan, tetapi pustaka jrst tidak konsisten. Saya tidak tahu apakah Anda dapat melakukan lebih dari berbicara dengan pengembangnya karena mereka harus memeriksa dan memperbarui dependensi proyek.

8
jrudolph

(berdasarkan Andrian):

<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>
7
象嘉道

One-JAR 0,97 baru saja dirilis di http://one-jar.sourceforge.net , dan telah diperpanjang dengan dukungan untuk kerangka kerja seperti Spring dan Guice , yang mungkin menghadirkan kesulitan untuk pendekatan lain. Ia juga menangani inversi classloader - di mana beberapa file JAR adalah eksternal untuk One-JAR (misalnya, JDBC driver yang mungkin tidak dikirimkan secara bundle).

One-JAR adalah baris perintah, dengan Ant dan Maven 2 plugin. Ini juga sederhana untuk membangun hanya menggunakan alat "toples".

Saya juga dapat merekomendasikan Eksportir Eclipse Jar (Runnable) di mana Ference Hechler menulis: dia melakukan pekerjaan besar dalam menghasilkan pendekatan sederhana untuk membungkus satu set file JAR. Dia dan saya bekerja di One-JAR, tetapi Eksportir Jar didasarkan pada basis kode yang berbeda.

5
simontuffs

Atau menggunakan plugin Maven Assembly (mvn Assembly: assembly)

3
Philip Helger

Ada alat yang disebut autojar yang akan memindai bytecode Anda dan mengkompilasi file .jar dengan kelas yang ditemukannya, termasuk kelas yang direferensikan (diimpor).

Tidak selalu bekerja dengan sesuatu seperti Spring, di mana Anda menentukan nama kelas dalam konfigurasi dan itu dimuat oleh framework.

3
user7094

Saya pikir alat yang Anda butuhkan di sini adalah JarSplice: http://ninjacave.com/jarsplice

Itu tidak memerlukan Ant atau Maven, memiliki GUI sendiri, mudah untuk menggunakan dan melakukan persis apa yang Anda minta -> Ini Menggabungkan konten beberapa file jar ke satu satu (harap dicatat masih perlu menambahkan classloadernya sendiri).

2
Nadir

Anda harus menggunakan plugin maven shading untuk melakukan itu. Saya sering menggunakan pakar untuk membuat file jar yang berdiri sendiri dan sangat kuat

Lihat lebih lanjut:

http://maven.Apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html

0
hoang