Frage

Gibt es ein Tool oder ein Skript, das leicht eine Reihe von JAR verschmilzt Dateien in einer JAR-Datei? Ein Bonus wäre leicht die Haupt-Datei Manifest zu setzen und es ausführbar machen.

Der konkrete Fall ist ein Java neu strukturiert Textwerkzeug . Ich möchte es mit etwas laufen wie:

  

java -jar rst.jar

Soweit ich das beurteilen kann, hat es keine Abhängigkeiten, die anzeigt, dass es keine einfache Single-File-Werkzeug sein sollte, aber die heruntergeladene ZIP-Datei viele Bibliotheken enthält.

      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

Wie Sie sehen können, ist es ein wenig wünschenswert, nicht dies manuell tun müssen.

Bisher habe ich nur versucht AutoJar und ProGuard, von denen beide ziemlich einfach waren zum Laufen zu bringen. Es scheint, dass es einige Probleme mit dem Konstanten-Pool in den JAR-Dateien.

Offenbar jrst etwas gebrochen ist, so werde ich einen Sprung machen es zu fixieren. Die Maven pom.xml Datei wurde offenbar auch gebrochen, also werde ich das in Ordnung bringen müssen, bevor jrst fixieren. .. ich fühle mich wie ein Bug-Magnet: -)


Update: Ich habe nie um diese Anwendung zu Festsetzung, aber ich ausgecheckt Eclipse- 's "Runnable JAR Export-Assistenten", die auf einem Fett JAR basieren. Ich fand das sehr einfach meinen eigenen Code für die Implementierung zu verwenden.

Einige der anderen ausgezeichneten Vorschläge könnten besser sein, in einer nicht-Eclipse-Umgebung aufbaut, oss wahrscheinlich einen schönen Build machen sollte mit Ant . (Maven, hat bisher nur mir gegeben Schmerz, aber andere lieben es.)

War es hilfreich?

Lösung

Eclipse-3.4 Runnable JAR Export Assistenten JDT.

In Eclipse 3.5, dies wird erweitert. Jetzt können Sie wählen, wie Sie Ihre referenzierten JAR-Dateien behandeln wollen.

Andere Tipps

Ant zipfileset macht den Job

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

Wenn Sie eine Maven Benutzer, in der Regel der Montag Plugin tun, was Sie wollen, oder möglicherweise die Schatten-Plugin, und in einigen Fällen eine Kombination.

Bei der Montage Plugin Sie eine Manifest-Datei in Ihrem Projekt setzen mit allen notwendigen Einstellungen, obwohl die Standardwerte in der Regel recht gut sind. Gebäude erfolgt dann mit

mvn assembly:assembly

Oder wenn Sie mehr spezielle Dinge zu behandeln, eine der anderen Ziele. Alle JAR-Dateien enthalten, werden von Maven Abhängigkeitsauflöser aufgenommen. Wenn Sie die Schatten-Plugin verwenden, es ist in der Regel Teil des Ziels installieren, und in einem bestimmten Projekt, das ich mache ich jetzt tun

mvn install
mvn assembly:single

Das assembly:single Ziel ist es um Lebensdauer Themen zu arbeiten, in diesem Fall in einem Frühling Anwendung .

Sie können mit JarJar dem Paket-Shadowing verwendet Ihre JAR-Datei doesn, um sicherzustellen, ‚t Konflikt mit anderen.

Es gibt ProGuard die nur packt nicht Ihre JAR-Dateien in eine, aber es kann auch optimieren, Bereinigung oder verschleiern Ihre Klassendateien, bevor die resultierende JAR-Datei viel kleiner ist als die Summe aller JAR-Dateien zu machen.

ich tatsächlich versucht ProGuard mit dem JRST Werkzeug, und es ist, wie Sie berichtet. Ich habe versucht, das Problem ausfindig zu machen und fand es href="http://bugs.icu-project.org/trac/ticket/3209" rel="nofollow noreferrer"> einen Fehler beziehen sich auf icu.jar Datei mit ICU4J Version 3.2. Jetzt ProGuard findet eine Reihe von anderen Fehler / Warnungen über incosistencies mit den Bibliotheken von JRST.

Meine Vermutung ist, dass ProGuard wie erwartet funktioniert, aber die Bibliotheken von jrst sind einfach nicht konsistent. Ich weiß nicht, wenn Sie viel mehr tun können, als mit seinen Entwicklern zu sprechen, da sie sollten die Abhängigkeiten des Projektes überprüfen und aktualisieren.

(basierend auf Andrians):

<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>

Ein-JAR 0.97 wurde soeben veröffentlicht unter http://one-jar.sourceforge.net , und es für Frameworks wie Frühling und Guice , die Schwierigkeiten zu anderen Ansätzen darstellen können. Es behandelt auch Classloader-Inversion - wo einige JAR-Dateien extern zu der One-JAR-Datei (zum Beispiel JDBC Treiber, die gebündelt werden können, nicht ausgeliefert).

Ein-JAR ist Befehlszeile, mit Ant und Maven 2 Plug-In. Es ist auch einfach nur mit dem „jar“ Werkzeug zu bauen.

Ich kann auch den Eclipse-Jar Exporteur (Runnable), auf dem Ference Hechler schrieb empfehlen: er in der kommenden mit einem einfachen Ansatz hat einen tollen Job eine Reihe von JAR-Dateien zu wickeln. Er und ich arbeitete an One-JAR, aber das Glas Exporteur basiert auf einem anderen Codebasis.

Es gibt ein Tool namens autojar die Ihre Bytecode scannt und eine .jar-Datei kompilieren mit die Klassen es, einschließlich verwiesen (importiert) Klassen findet.

funktioniert nicht immer mit so etwas wie Frühling, obwohl, wo Sie die Klassennamen in der Konfiguration festlegen, und es wird durch den Rahmen geladen.

oder mit der Maven Montage-Plugin (mvn assembly: assembly)

Ich denke, dass das Werkzeug, das Sie hier brauchen, ist JarSplice : http://ninjacave.com/ jarsplice

Es hat nicht erfordern Ant oder Maven, seine eigene GUI hat, ist es einfach, genau zu bedienen und tun, was Sie gefragt -> Es führt den Inhalt von mehreren jar Dateien zu einem einzigen (bitte beachten sie müssen noch einen eigenen Classloader hinzufügen).

Sie sollten Maven Shading-Plugin verwenden, das zu tun. Ich verwende Maven oft eigenständige jar-Datei zu erstellen und es ist so mächtig

Sehen Sie mehr:

http://maven.apache.org/ plugins / maven-Schatten-Plugin / examples / includes-excludes.html

Klingt wie Apache Ant ist das, was Sie suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top