2011-08-23 24 views
5

Creé un archivo ejecutable utilizando un script ant, el único contenedor externo que utilicé fue joda-time 2.0. El script de compilación de ant "pareció" funcionar, ya que no recibí ningún error de compilación, y si tuviera que eliminar el jode-time 2.0.jar del directorio lib, la compilación fallaría tal como se esperaba. En cualquier caso, después de construir el frasco consigo este error cuando trato de correr con:Excepción en el hilo "principal" java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant

java-jar myapp.jar

Excepción en el hilo "principal" java.lang.NoClassDefFoundError: org/joda/hora/LegibleInstante

¿Alguna idea de esto? No estoy seguro de dónde mirar, todo funciona bien dentro de Eclipse. gracias por cualquier idea

Respuesta

9

Presumiblemente, su jar no contiene un manifest header indicando a Java que agregue el jar joda-time al classpath. Esa es la única forma de tener otras entradas classpath al usar java -jar. Puede hacerlo directamente con Ant manifest task, o probablemente haya muchas otras formas de hacerlo, incluida la construcción de su classpath existente.

Alternativamente, intente

java -cp myapp.jar:joda-time-2.0.jar com.foo.YourMainClass 
2

A menos que utilice un cargador de clases personalizado o algo así JarJar, entonces no se puede agrupar archivos JAR externos dentro de su JAR ejecutable. El archivo de manifiesto deberá mostrar una ruta de clase, pero la JVM buscará los archivos JAR enumerados en el mismo directorio que el JAR ejecutable, no dentro de su JAR ejecutable.

Cuestiones relacionadas