2011-08-23 16 views
5

Ho creato un jar eseguibile utilizzando uno script ant, l'unico jar esterno che ho usato era joda-time 2.0. Lo script ant form "sembrava" funzionare in quanto non ricevevo alcun errore di compilazione e, se dovessi rimuovere il jode-time 2.0.jar dalla directory lib, la compilazione fallirebbe come previsto. In ogni caso, dopo aver costruito il barattolo ottengo questo errore quando provo a correre con:Eccezione nel thread "main" java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant

java-jar myapp.jar

Exception in thread "main" java.lang.NoClassDefFoundError: org/Joda/ora/ReadableInstant

Qualche idea su questo? Non sono sicuro di dove guardare, tutto funziona perfettamente con Eclipse. grazie per eventuali idee

risposta

9

Presumibilmente, il tuo barattolo non contiene un manifest header che dice a Java di aggiungere il jar joda-time al classpath. Questo è l'unico modo per avere altre voci del percorso di classe quando si utilizza java -jar. Puoi farlo direttamente con Ant manifest task, o ci sono probabilmente molti altri modi per farlo, inclusa la costruzione dal tuo classpath esistente.

In alternativa, prova a

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

A meno che non si sta utilizzando un programma di caricamento classe personalizzato o qualcosa di simile JarJar, allora non si può racchiudere JAR esterni all'interno del vostro JAR eseguibile. Il file manifest dovrà elencare un classpath, ma la JVM cercherà i JAR che elenchi nella stessa directory del tuo JAR eseguibile, non all'interno del tuo JAR eseguibile.

Problemi correlati