2009-09-23 13 views
5

Tengo problemas para usar jarjar desde la línea de comandos para combinar un programa Scala simple con scala runtime-library.¿Cómo usar jarjar desde la línea de comandos?

jarjar detecta correctamente la dependencia:

$ 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 

integración de estas plantas no funciona, sin embargo:

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

el archivo JAR que consigo todavía depende de Scala-library.jar. Si agrego o no la variable CLASSPATH no hace diferencia. Mi archivo rules.jjl se ve así:

keep BCT 

¿Qué hacer?

+1

Es solo un truco mental jedi. Esperemos que no te bink demasiado ... –

Respuesta

1

El uso de la opción java "-jar" ignora el classpath. Intente especificar la clase principal de forma explícita con una ruta de clases, y omite "jar":

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

No funciona, tampoco. –

+0

Para mí, para ser más específico, crea un jar, que solo contiene BCT.jar. No quiero cambiar el nombre de ningún paquete, sino recopilar todas las dependencias. Entonces en las reglas tengo una regla de mantenimiento con el paquete de la clase principal en mi BCT.jar – pihentagy

0

trate de añadir un torreón de la clase scala.runtime.Nothing $. Encontré esto necesario al usar un producto similar (autojar; http://autojar.sourceforge.net/en_d/index.html) con Scala.

+0

Eso tampoco funciona. Parece que jarjar solo toma clases del archivo jar de entrada especificado en la línea de comandos, pero no de los jar dependientes, y no parece haber una forma de especificarlos. –

0

jarjar no vuelve a empaquetar otros frascos en su jar. Solo cambia el nombre de las dependencias dentro del mismo contenedor.

Utilice el método descrito aquí Clean way to combine multiple jars? Preferably using Ant para volver a unir todos los frascos dependientes en el frasco, luego ejecute jarjar para evitar el futuro infierno de la dependencia.

+0

en realidad, simplemente volver a utilizar la tarea ant no es la solución más ideal. utilicé el plugin eclipse fat-jar para hacer esto. Básicamente, haga un proyecto vacío y coloque todas las jarras en la ruta de compilación del proyecto, luego use el plugin fat-jar http://fjep.sourceforge.net/ para exportar a un frasco gordo. – yincrash

Cuestiones relacionadas