it-swarm-eu.dev

Nejjednodušší způsob, jak sloučit vydání do jednoho souboru JAR

Existuje nástroj nebo skript, který snadno spojí spoustu souborů JAR do jednoho souboru JAR? Bonusem by bylo snadné nastavení manifestu hlavního souboru a jeho provedení.

Konkrétním případem je Java restrukturalizovaný textový nástroj . Chci to spustit s něčím podobným:

Java -jar rst.jar

Pokud mohu říci, nemá žádné závislosti, které by naznačovaly, že by to neměl být snadný nástroj pro jeden soubor, ale stažený soubor Zip obsahuje mnoho knihoven.

      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

Jak vidíte, je to poněkud žádoucí, aby to nebylo nutné provádět ručně.

Zatím jsem jen vyzkoušela AutoJar a ProGuard, které se daly poměrně snadno spustit. Zdá se, že existuje nějaký problém s konstantním fondem v souborech JAR.

Zdá se, že jrst je poněkud zlomený, takže to udělám. Soubor Mavenpom.xml byl zřejmě také rozbitý, takže si to musím před opravou opravit. Cítím se jako magnet na chyby :-)


Aktualizace: Nikdy jsem se nedostal k vyřešení této aplikace, ale jsem se odhlásil Eclipse s "Runnable JAR export průvodce", který je založen na tlustý JAR. Zjistil jsem, že je to velmi snadné pro nasazení vlastního kódu.

Některé z dalších vynikajících návrhů by mohly být lepší pro sestavení v prostředí, které není Eclipse, pravděpodobně by mělo vytvořit pěknou sestavu pomocí Ant . (Maven, zatím mi dal bolest, ale jiní to milují.)

70
tovare

Eclipse 3.4 Průvodce exportem JDT's Runnable JAR.

V Eclipse 3.5 bylo toto prodlouženo. Nyní si můžete vybrat, jak chcete léčit vaše odkazované soubory JAR.

33
Stephen Denne

Antzipfileset to dělá

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

Po vyzkoušení několika různých řešení jsem našel One-JAR nejjednodušší s ním pracovat, a podařilo se mi to udělat přesně: vyrobit jeden, spustitelný JAR, který obsahuje vše, co potřebuji.

One-JAR používá vlastní zavaděč tříd, který může navigovat vnořené zdroje. Podívejte se na soubor .bat ve stažení, vypadá to jako org.codelutin.jrst.JRST v jrst-0.8.1.jar je hlavní třída, takže manifest by měl vypadat takto:

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

Opravdu super je, že One-JAR zvládne předávání argumentů příkazového řádku pro vás. Classpath zpracovává zavaděč vlastní třídy, za předpokladu, že všechny prostředky, které potřebujete, jsou svázány do jednoho JAR.

Nejjednodušší způsob použití One-JAR je s mravencem; tam je vlastní "one-jar" ant úkol, který funguje následovně (za předpokladu, že váš manifest se nazývá "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

Pokud jste Maven uživatel, obvykle plugin pro sestavení dělá to, co chcete, nebo potenciálně plugin pro stíny, a v některých případech kombinaci.

S pluginem pro sestavení vložíte do svého projektu soubor manifestu se všemi potřebnými nastaveními, i když výchozí hodnoty jsou obvykle docela dobré. Budova je pak hotová

mvn Assembly:assembly

Nebo pokud máte více zvláštních věcí, s nimiž se můžete vypořádat, jeden z dalších cílů. Všechny soubory JAR, které mají být zahrnuty, jsou převzaty Mavenovým resolverem závislosti. Pokud používáte plugin pro stínování, je to obvykle součást instalačního cíle a v jednom konkrétním projektu dělám nyní

mvn install
mvn Assembly:single

Cílem Assembly:single je pracovat na problémech celého života, v tomto případě v aplikaci Spring .

14
larsivi

Můžete použít JarJar , který bude používat stínování balíků, aby se ujistil, že váš soubor JAR není v konfliktu s ostatními.

8
Steve g

K dispozici je ProGuard , který nejen zabalí vaše JAR soubory do jednoho, ale může také optimalizovat, vyčistit nebo zmažit vaše třídy soubory, takže výsledný JAR soubor mnohem menší než součet všech JAR souborů dříve.

Vlastně jsem se pokusil ProGuard s nástrojem JRST, a je to, jak jste nahlásili. Pokusil jsem se problém vyřešit a zjistil, že se týká bug v knihovně ICU4J, na kterou odkazuje jrst. Problém je v tom, že právě používaná verze ICU je právě zastaralá. Takže jsem soubor icu.jar nahradil ICU4J verze 3.2. Nyní ProGuard najde spoustu dalších chyb/varování o nesrovnalostech s knihovnami JRST.

Můj odhad je, že ProGuard pracuje podle očekávání, ale knihovny jrst prostě nejsou konzistentní. Nevím, jestli můžete udělat mnohem víc, než mluvit s jeho vývojáři, protože by měli zkontrolovat a aktualizovat závislosti projektu.

8
jrudolph

(na základě Andrianovy):

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

Jeden-JAR 0.97 byl právě vydán na http://one-jar.sourceforge.net , a byl rozšířen o podporu pro rámce jako Spring a Guice , které mohou problémy s jinými přístupy. To také zvládne classloader-inverze - kde některé JAR soubory jsou vnější k One-JAR (například, JDBC ovladače, které nemohou být dodávány sbalený).

Jeden-JAR je příkazový řádek, s Ant a Maven 2 pluginy. Je to také jednoduché sestavení pomocí nástroje "jar".

Mohu také doporučit Eclipse Jar Vývozce (Runnable), na kterém Ference Hechler napsal: udělal skvělou práci při příchodu s jednoduchým přístupem k balení soubor JAR. On a já jsme pracovali na One-JAR, ale Jar Exporter je založen na jiné codebase.

5
simontuffs

Nebo pomocí pluginu Maven Assembly (mvn Assembly: assembly)

3
Philip Helger

Existuje nástroj nazvaný autojar , který prohledá váš bytecode a zkompiluje soubor .jar s třídami, které nalezne, včetně odkazovaných (importovaných) tříd.

Ne vždy však pracuje s něčím, jako je jaro, kde zadáváte názvy tříd v konfiguraci a načítá je framework.

3
user7094

Myslím, že nástroj, který zde potřebujete, je JarSplice: http://ninjacave.com/jarsplice

Vyžaduje ne vyžadovat Ant nebo Maven, má své vlastní GUI, je jednoduché použít a udělat přesně to, co jste požádali -> Sloučí obsah několika souborů jar do jednoho (prosím, uvědomte si, že je třeba ještě přidat vlastní třídič).

2
Nadir

K tomu byste měli použít zásuvný modul maven shading. Často používám maven stavět samostatný soubor jar a je to tak silný

Vidět víc:

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

0
hoang