Ho letto così tanti articoli/spiegazioni su questo e ho impiegato troppe ore, ma tutto è troppo ampio o specifico.Come combinare più jar in uno?
Questa domanda si applica solo a un'applet che ho creato. Contiene una classe e richiede altre 2 librerie Jar. Ho incluso questi nei progetti (più progetti, perché ho provato questo in Netbeans ed Eclipse ... è facile ricreare un progetto di una classe). Il punto di tutto questo è che il mio progetto HTML/web non dovrebbe avere a che fare con più di un Jar o farvi riferimento. Non è nemmeno un'applet/progetto complicato.
Originariamente, l'ho creato in Netbeans. Ha il pacchetto principale, e dopo aver aggiunto i 2 Jars, vengono messi in un'area "Librerie" (la cartella "risorse"). Dopo averlo creato, Netbeans crea un Jar per il mio unico pacchetto/classe e quindi mette le altre 2 librerie in una directory "lib" accanto ad essa. Mi piacerebbe che fossero in uno, Jar distribuibile. Dalle molte cose che ho esaminato, ho provato a inserire quanto segue in build.xml:
<target name="YourBigJar" depends="-post-jar">
<jar destfile="dist/BigJar.jar">
<zipfileset src="dist/cxapplet.jar"/>
<zipfileset src="resources/dpotapi.jar"/>
<zipfileset src="resources/dpotjni.jar"/>
</jar>
</target>
Ma non produce nulla. Ho ottenuto questo da NetBeans - deploying all in one jar. Non so/capisco come usare build.xml, quindi non sarei sorpreso se qualcosa andasse storto (ovviamente), ma non ricevo messaggi di errore/avviso.
Quando l'ho fatto in Eclipse, li combina efficacemente, ma quando uso il Jar nel mio vero progetto web, dice che non riesce a trovare le classi dagli altri 2 Jars. Non capirei come risolverlo, ma è un problema di Classpath? In Eclipse, creo una nuova directory chiamata "lib" e inserisco i jar. Quindi, faccio clic con il pulsante destro del mouse sul progetto, apro "Percorso di creazione Java" e aggiungo i jar, controllandoli anche nella scheda "Ordine ed esportazione". Dalle cose che ho letto, faccio clic con il pulsante destro del mouse sul progetto, scegli "Esporta", scegli "Jar", deseleziona i file ".classpath" e ".project", seleziona solo "Esporta file e risorse di classe generati", quindi permettigli di generare il file manifest. Come ho detto, questo genera un Jar, ma il suo contenuto è il mio pacchetto e quindi una directory "lib" che ha gli altri 2 Jars. The Manifest è lì, ma è abbastanza vuoto e non fa riferimento a nessun file (non è sicuro se sia importante). Quando lo inserisco nella mia app web, dice che l'applet non riesce a trovare le altre classi.
Sembra così semplice: un pacchetto/classe, due jar esterni ... si combinano in un unico Jar quando vengono creati per la distribuzione come applet. Qualche idea?
UPDATE:
Da quando abbiamo iniziato con Maven, qualcuno sembrava ad utilizzare un plugin Maven. Così abbiamo finito per creare un nuovo progetto per ospitare l'applet (dal momento che è utilizzato su più progetti), e usato questo nel nostro pom.xml
, alla fine:
<build>
<resources>
<resource>
<directory>${basedir}/applet</directory>
<excludes>
<exclude>codesignstore</exclude>
</excludes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-5</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>cxapplet</finalName>
<archive>
<index>true</index>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-my-applet-jar</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.2</version>
<executions>
<execution>
<id>sign</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
<configuration>
<keystore>${basedir}/applet/codesignstore</keystore>
<alias>codesigncert</alias>
<storepass>HIDDEN</storepass>
<keypass>HIDDEN</keypass>
</configuration>
</plugin>
</plugins>
</build>
ed è stato bello perché ci ha permesso di utilizzare il nostro Certificato di firma del codice per firmarlo automaticamente anche.
* "Il punto di tutto questo è che il mio progetto HTML/web non dovrebbe avere a che fare con più di un Jar" * È banale farlo in modo che il browser possa gestirlo. * "Qualche idea?" * Distribuisci i barattoli come al solito (con vantaggi rispetto alla tua strategia attuale) e risparmia tempo. –
È meglio creare dipendenze da un contenitore all'altro. Molti strumenti per la creazione di barattoli facilitano il lavoro. –
@joeyrohan Non sono sicuro di cosa intendi, ma è per questo che sto cercando di utilizzare gli strumenti di costruzione di Netbeans ed Eclipse, che pensavo lo avrebbero fatto, per realizzare questo. – Ian