Translate

lunes, 25 de marzo de 2013

java -classpath alternativa a java -jar

Este post que o pongo hoy es debido a la guerra que me está dando la generación de un archivo JAR ejecutable de tal modo que todas las librerías de las que depende para funcionar estén dentro del JAR.

El programa es un método public static void main() de toda la vida que queremos que se arranque por línea de comandos para realizar una serie de operaciones como un daemon ejecutándose cada cierta periodicidad.

El programa lazado en eclipse se lanza perfectamente y funciona, pero una vez empaquetado con eclipse para ejecutarse como Jar no funciona.

La manera en la que he intentado ejecutarlo es la siguiente:


java -jar DaemonBatch-1.1.0.jar

JAR

y dentro del Jar tenemos su correspondiente archivo de Manifest.MF con todo lo necesario para la ejecución, la clase a ejecutar  las dependencias y el classpath.


Manifest-Version: 1.0
Rsrc-Class-Path:  aspectj-1.6.12.jar
 spring-security-3.1.0.RELEASE-ldap.jar spring-security-3.1.0.RELEASE-
 config.jar httpcore-4.1.jar aopalliance-1.0.jar spring-security-3.1.0
 .RELEASE-core.jar org.springframework-3.1.1.RELEASE-transaction.jar j
 stl-1.2-api.jar blazeds-4.0.0.14931-rds-server.jar javamail-1.4.5.jar
  org.springframework-3.1.1.RELEASE-instrument.jar spring-security-3.1
 .0.RELEASE-acl.jar spring-security-3.1.0.RELEASE-web.jar .............
Class-Path: .
Rsrc-Main-Class: com.antuansoft.batch.main.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader


Lo he exportado de diferentes formas pero siempre me ha dado el mismo error


java.io.FileNotFoundException: URL [rsrc:com/antuansoft/batch/task/] cannot be resolv
ed to absolute file path because it does not reside in the file system: rsrc:com
/antuansoft/batch/task/


Así que he optado por descomprimir el JAR, poner todas las librerias .jar en un directorio lib y ejecutar el siguiente comando para que funcione sin problemas.


java -classpath .;lib/* com.gniux.batch.main.Main

Y ha arrancado sin ningún problema.

Así que si en tu programa no es necesario que este se empaquete todo en un JAR, una alternativa es la que os acabo de proponer.

De todas formas seguiremos investigando.










No hay comentarios:

Publicar un comentario