2009-09-23 27 views
5

Sto riscontrando problemi nell'utilizzo di jarjar dalla riga di comando per combinare un semplice programma Scala con la libreria runtime scala.Come usare jarjar dalla riga di comando?

jarjar rileva correttamente la dipendenza:

$ java -jar ~/Desktop/saug/jarjar-1.0.jar find jar BCT.jar scala-library.jar 
/home/schani/Work/scala/bct/BCT.jar -> /home/schani/Work/scala/bct/scala-library.jar 

la loro combinazione non funziona, però:

$ CLASSPATH=./scala-library.jar java -jar ~/Desktop/saug/jarjar-1.0.jar process rules.jjl BCT.jar BCTS.jar 

Il file jar che ricevo ancora dipende dalla scala-library.jar. Se aggiungo o meno la variabile CLASSPATH non fa differenza. Il mio file rules.jjl è simile al seguente:

keep BCT 

Cosa fare?

+1

È solo un trucco mentale jedi. Spero che non ti stia facendo troppo male ... –

risposta

1

L'utilizzo dell'opzione java "-jar" ignora il classpath. Provare a specificare la classe principale in modo esplicito con un percorso di classe, e omettere "jar":

java -cp ~/Desktop/saug/jarjar-1.0.jar:./scala-library.jar com.tonicsystems.jarjar.Main process rules.jjl BCT.jar BCTS.jar 
+0

Non funziona, neanche. –

+0

Per me, per essere più specifico crea un jar, che contiene solo BCT.jar. Non voglio rinominare alcun pacchetto, ma collezionare tutte le dipendenze. Quindi nelle regole ho una regola di mantenimento con il pacchetto della classe principale nel mio BCT.jar – pihentagy

0

provare ad aggiungere un torrione per la classe scala.runtime.Nothing $. Ho trovato ciò necessario quando si utilizza un prodotto simile (autojar; http://autojar.sourceforge.net/en_d/index.html) con Scala.

+0

Che non funziona, neanche. jarjar sembra prendere solo le classi dal file jar di input specificato sulla riga di comando, ma non da qualsiasi jar dipendente, e non sembra esserci un modo per specificarle. –

0

jarjar non ricompone altri barattoli nel tuo barattolo. Rinomina solo le dipendenze all'interno dello stesso jar.

Utilizzare il metodo descritto qui Clean way to combine multiple jars? Preferably using Ant per rejar tutti i jar dipendenti nel jar, quindi eseguire jarjar per evitare un futuro attacco di dipendenza.

+0

in realtà, il solo rezipping con l'attività ant non è la soluzione ideale. ho usato il plugin di grasso-vaso Eclipse per fare questo. in pratica, crea un progetto vuoto e metti tutti i vasi nel percorso di costruzione del progetto, quindi usa il plugin fat-jar http://fjep.sourceforge.net/ per esportarlo in un barattolo di grasso. – yincrash