it-swarm-tr.com

Bir JAR dosyasında bir yayın birleştirmenin en kolay yolu

Bir grup JAR dosyasını bir JAR dosyasına kolayca birleştiren bir araç veya komut dosyası var mı? Bonus, ana dosya listesini kolayca ayarlamak ve çalıştırılabilir hale getirmek olacaktır.

Somut durum bir Java yeniden yapılandırılmış metin aracıdır . Şunu gibi bir şeyle çalıştırmak istiyorum:

Java -jar rst.jar

Söyleyebileceğim kadarıyla, kolay bir tekli dosya aracı olmaması gerektiğini belirten bir bağımlılığı yok ama indirilen Zip dosyası çok fazla kitaplık içeriyor.

      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

Gördüğünüz gibi, bunu manuel olarak yapmanız gerekmiyor.

Şimdiye kadar AutoJar ve ProGuard'ı denedim, ikisi de koşması oldukça kolaydı. JAR dosyalarındaki sabit havuzda bir sorun olduğu anlaşılıyor.

Görünüşe göre jrst biraz kırıldı, ben de tamir etmeye çalışacağım. Mavenpom.xml dosyası da görünüşte kırıldı, bu yüzden jrst düzeltmeden önce bunu düzeltmem gerekecek ... Kendimi bir böcek mıknatısı gibi hissediyorum


Güncelleme: Bu uygulamayı düzeltmek için hiçbir zaman bulamadım, ancak Eclipse 'ın "Runnable JAR export wizard" ı kontrol ettim. Bunu kendi kodumu dağıtmak için kullanmak çok kolay buldum.

Diğer mükemmel önerilerden bazıları Eclipse olmayan bir ortamdaki yapılar için daha iyi olabilir, muhtemelen oss Ant kullanarak güzel bir yapı oluşturmalıdır. (Maven, şimdiye kadar bana acı verdi, ama diğerleri onu seviyor.)

70
tovare

Eclipse 3.4 JDT'nin Çalıştırılabilir JAR ihracat sihirbazı.

Eclipse 3.5'te bu uzatılmıştır. Artık başvurulan JAR dosyalarınızı nasıl ele almak istediğinizi seçebilirsiniz.

33
Stephen Denne

Ant's zipfileset işi yapıyor

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

Birkaç farklı çözüm denedikten sonra, One-JAR ile çalışılması en kolay olanı yaptım ve tam olarak bunu yapmayı başardım: İhtiyacım olan her şeyi içeren tek, çalıştırılabilir bir JAR üret.

One-JAR, iç içe geçmiş kaynaklarda gezinebilen özel bir sınıf yükleyici kullanır. İndirme sırasında .bat dosyasına bakın, jrst-0.8.1.jar'daki org.codelutin.jrst.JRST ana sınıfı gibi görünüyor, bu nedenle bildiriminiz şöyle görünmelidir:

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

Gerçekten harika olan şey, One-JAR'ın sizin için komut satırı argümanlarını iletmekle başa çıkmasıdır. Sınıf yolu, ihtiyacınız olan tüm kaynakların tek bir JAR'da toplandığı varsayılarak, özel sınıf yükleyici tarafından işlenir.

One-JAR'ı kullanmanın en kolay yolu karınca; Özel bir "tek kavanoza" karınca görevi vardır (aşağıdaki bildirimin "rst.mf" olarak adlandırıldığı varsayılarak):

<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

Eğer bir Maven kullanıcısıysanız, tipik olarak Meclis eklentisi istediğinizi yapar veya potansiyel olarak gölge eklentisi ve bazı durumlarda bir kombinasyon.

Montaj eklentisi ile, varsayılanlar oldukça iyi olmasına rağmen projenize gerekli ayarlarla birlikte bir manifesto dosyası koyarsınız. Bina sonra ile yapılır

mvn Assembly:assembly

Ya da başa çıkacak daha fazla özel şeyiniz varsa, diğer hedeflerden biri. Dahil edilecek tüm JAR dosyaları Maven'in bağımlılık çözümleyicisi tarafından alınır. Gölge eklentisini kullanıyorsanız, bu genellikle yükleme hedefinin bir parçasıdır ve şu anda yapıyorum belirli bir projede

mvn install
mvn Assembly:single

Assembly:single hedefi, Spring uygulamasında bu durumda, ömür boyu meseleler etrafında çalışmaktır.

14
larsivi

JAR dosyanızın başkalarıyla çakışmadığından emin olmak için paket gölgelemeyi kullanacak JarJar öğesini kullanabilirsiniz.

8
Steve g

ProGuard olan, JAR dosyalarınızı yalnızca bir pakete paketlemekle kalmaz, aynı zamanda sınıf dosyalarınızı optimize edebilir, temizleyebilir ya da gizleyebilir, sonuçta JAR dosyasını daha önce tüm JAR dosyalarının toplamından daha küçük hale getirir.

ProGuard'ı JRST aracıyla denedim ve rapor ettiğiniz gibi. Sorunu tespit etmeye çalıştım ve jrst tarafından referans verilen ICU4J kütüphanesinde bug ile ilgili olduğunu gördüm. Sorun, kullanılmış ICU sürümünün şu anda çok eski olması. Bu yüzden icu.jar dosyasını ICU4J sürüm 3.2 ile değiştirdim. Şimdi ProGuard, JRST kütüphaneleriyle tutarsızlıklar hakkında bir sürü başka hata/uyarı buluyor.

Tahminime göre ProGuard beklendiği gibi çalışıyor, ancak jrst kütüphaneleri tutarlı değil. Projenin bağımlılıklarını kontrol edip güncellemeleri gerektiği için geliştiricileri ile konuşmaktan daha fazlasını yapabilir misiniz bilmiyorum.

8
jrudolph

(Andrianus'a göre):

<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, http://one-jar.sourceforge.net adresinde yayınlandı ve Bahar ve Guice gibi çerçeveler için destekle genişletildi. diğer yaklaşımlara sorun sunmak. Ayrıca, bazı JAR dosyalarının One-JAR'a harici olduğu sınıf yükleyici-inversiyonu da ele alır (örneğin, paketlenmemiş olabilecek JDBC sürücüleri).

One-JAR, Ant ve Maven 2 eklentileri olan komut satırıdır. Sadece "kavanoz" aracını kullanarak inşa etmek de kolaydır.

Ference Hechler'in yazdığı Eclipse Jar Exporter (Runnable) 'ı da önerebilirim: bir dizi JAR dosyasını sarmalamak için basit bir yaklaşımla gelmekte harika bir iş çıkardı. O ve ben One-JAR'da çalıştık, ancak Jar Exporter farklı bir kod tabanına dayanıyor.

5
simontuffs

Veya Maven Assembly eklentisini kullanarak (mvn Assembly: assembly)

3
Philip Helger

Başvuruda bulunan (içe aktarılan) sınıflar da dahil olmak üzere bytecode'unuzu tarayacak ve bulduğu sınıflarla bir .jar dosyası derleyen autojar adında bir araç vardır.

Her zaman Spring gibi bir şeyle çalışmaz, ancak yapılandırmada sınıf adlarını belirtirsiniz ve çerçeveye yüklenir.

3
user7094

Burada ihtiyacınız olan aracın JarSplice: http://ninjacave.com/jarsplice olduğunu düşünüyorum.

Değil gerektirir Ant veya Maven, kendi GUI'sine sahip, kullanmak ve tam olarak istediğiniz şeyi yapmak çok kolay -> Birkaç jar dosyasının içeriğini tek bir dosyada birleştirir. (lütfen kendi sınıf yükleyicisini eklemesi gerektiğini unutmayın).

2
Nadir

Bunu yapmak için maven gölgeleme eklentisini kullanmalısınız. Bağımsız jar dosyası oluşturmak için sıklıkla maven kullanıyorum ve çok güçlü

Daha fazla gör:

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

0
hoang