Domanda

Esiste uno strumento o uno script che unisce facilmente un gruppo di file VASO file in un file JAR?Un vantaggio sarebbe impostare facilmente il manifest del file principale e renderlo eseguibile.

Il caso concreto è a Strumento di testo ristrutturato Java.Vorrei eseguirlo con qualcosa del tipo:

java -jar primo.jar

Per quanto ne so, non ha dipendenze, il che indica che non dovrebbe essere un semplice strumento a file singolo, ma il file ZIP scaricato contiene molte librerie.

      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

Come puoi vedere, è in qualche modo auspicabile non aver bisogno di farlo manualmente.

Finora ho provato solo AutoJar e ProGuard, entrambi abbastanza facili da avviare.Sembra che ci sia qualche problema con il pool costante nei file JAR.

Apparentemente il primo è leggermente rotto, quindi proverò a ripararlo.IL Esperto di pom.xml Apparentemente anche il file era danneggiato, quindi dovrò risolverlo prima di sistemarlo per primo...Mi sento come una calamita per gli insetti :-)


Aggiornamento:Non sono mai riuscito a sistemare questa applicazione, ma ho controllato Eclisse"Procedura guidata di esportazione JAR eseguibile" che si basa su un grosso JAR.L'ho trovato molto facile da usare per distribuire il mio codice.

Alcuni degli altri eccellenti suggerimenti potrebbero essere migliori per le build in un ambiente non Eclipse, probabilmente oss dovrebbe creare una bella build usando Formica.(Maven, finora mi ha fatto solo male, ma gli altri lo adorano.)

È stato utile?

Soluzione

Procedura guidata di esportazione JAR eseguibile di Eclipse 3.4 JDT.

In Eclipse 3.5, questo è stato esteso.Ora puoi scegliere come trattare i tuoi file JAR di riferimento.

Altri suggerimenti

Di formica zipfileset fa il lavoro

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

Dopo aver provato alcune soluzioni diverse, ho trovato Un BARATTOLO il più semplice con cui lavorare e sono riuscito a fare esattamente questo:produrre un unico JAR eseguibile che contiene tutto ciò di cui ho bisogno.

One-JAR utilizza un caricatore di classi personalizzato che può navigare tra le risorse nidificate.Guarda il file .bat nel download, sembra che org.codelutin.jrst.JRST in jrst-0.8.1.jar sia la classe principale, quindi il tuo manifest dovrebbe assomigliare a questo:

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

La cosa davvero interessante è che One-JAR gestirà il passaggio degli argomenti della riga di comando per te.Il percorso di classe viene gestito dal caricatore di classi personalizzato, presupponendo che tutte le risorse necessarie siano raggruppate nel singolo JAR.

Il modo più semplice per utilizzare One-JAR è con ant;c'è un'attività ant personalizzata "one-jar" che funziona come segue (supponendo che il tuo manifest sia chiamato "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>

Se sei un Esperto di utente, in genere il plug-in di assemblaggio fa ciò che desideri, o potenzialmente il plug-in di ombreggiatura e in alcuni casi una combinazione.

Con il plugin assembly inserisci un file manifest nel tuo progetto con tutte le impostazioni necessarie, sebbene le impostazioni predefinite siano generalmente abbastanza buone.Quindi la costruzione è terminata

mvn assembly:assembly

Oppure, se hai cose più speciali di cui occuparti, uno degli altri obiettivi.Tutti i file JAR da includere vengono raccolti dal risolutore di dipendenze di Maven.Se usi il plug-in shade, in genere fa parte dell'obiettivo di installazione e in un particolare progetto che sto realizzando ora lo faccio

mvn install
mvn assembly:single

IL assembly:single l'obiettivo è risolvere i problemi di durata, in questo caso in a Primavera applicazione.

Puoi usare JarJar che utilizzerà lo shadowing del pacchetto per assicurarsi che il tuo file JAR non entri in conflitto con altri.

C'è ProGuard che non solo comprime i tuoi file JAR in uno solo, ma può anche ottimizzare, pulire o offuscare i file di classe, rendendo il file JAR risultante molto più piccolo della somma di tutti i file JAR precedenti.

In realtà ho provato ProGuard con lo strumento JRST ed è come hai riferito.Ho provato a rintracciare il problema e ho trovato che lo riguardasse un insetto nella libreria ICU4J a cui fa riferimento jrst.Il problema è che la versione ICU utilizzata al momento è molto obsoleta.Quindi ho sostituito il icu.jar file con ICU4J versione 3.2.Ora ProGuard trova una serie di altri errori/avvertimenti sulle incoerenze con le librerie di JRST.

La mia ipotesi è che ProGuard funzioni come previsto, ma le librerie di jrst semplicemente non sono coerenti.Non so se puoi fare molto di più che parlare con i suoi sviluppatori poiché dovrebbero controllare e aggiornare le dipendenze del progetto.

(basato su 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>

One-JAR 0.97 è appena stato rilasciato su http://one-jar.sourceforge.net, ed è stato esteso con il supporto per framework come Primavera E Guice, che potrebbe presentare problemi ad altri approcci.Gestisce anche l'inversione del classloader, in cui alcuni file JAR sono esterni a One-JAR (ad esempio, JDBC driver che potrebbero non essere spediti in bundle).

One-JAR è a riga di comando, con Formica E Esperto di 2 plugin.È anche semplice da costruire utilizzando semplicemente lo strumento "jar".

Posso anche consigliare Eclipse Jar Exporter (Runnable) su cui Ference Hechler ha scritto:ha fatto un ottimo lavoro ideando un approccio semplice per racchiudere una serie di file JAR.Lui e io abbiamo lavorato su One-JAR, ma Jar Exporter è basato su una base di codice diversa.

C'è uno strumento chiamato autojar che eseguirà la scansione del tuo bytecode e compilerà un file .jar con le classi che trova, incluse le classi referenziate (importate).

Tuttavia, non sempre funziona con qualcosa come Spring, in cui specifichi i nomi delle classi nella configurazione e viene caricato dal framework.

Oppure utilizzando il plug-in di assemblaggio Maven (mvn assembly:assembly)

Penso che lo strumento di cui hai bisogno qui sia JarSplice: http://ninjacave.com/jarsplice

Lo fa non richiede Ant o Maven, ha la propria GUI, è semplice da usare e fa esattamente quello che hai chiesto --> Unisce il contenuto di diversi file jar in uno solo (tieni presente che è ancora necessario aggiungere il proprio classloader).

Dovresti usare il plugin Maven Shading per farlo.Uso spesso Maven per creare file jar autonomi ed è così potente

Vedi altro:

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

Sembra Formica Apache è quello che stai cercando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top