2011-08-23 15 views
5

Zbudowałem plik wykonywalny za pomocą skryptu ant, jedynym zewnętrznym słojem, którego użyłem był joda-time 2.0. Skrypt budujący mrówki "wydawał się" działać, ponieważ nie otrzymywałem żadnych błędów kompilacji, a gdybym miał usunąć plik j.czasowy w wersji jode-time z katalogu lib, kompilacja rzeczywiście by się nie powiodła. W każdym razie, po wybudowaniu słoik otrzymuję ten błąd, gdy próbuję uruchomić z:Wyjątek w wątku "główny" java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant

java -jar myapp.jar

Wyjątek w wątku „main” java.lang.NoClassDefFoundError: org/Joda/czas/ReadableInstant

Jakieś przemyślenia na ten temat? Po prostu nie jestem pewien, gdzie szukać, wszystko działa dobrze w Eclipse. dzięki za wszelkie pomysły

Odpowiedz

9

Prawdopodobnie twój słoik nie zawiera manifest header mówi Java, aby dodać słoik czasu Joda do ścieżki klasy. Jest to jedyny sposób, aby mieć inne wpisy w klasie clas podczas korzystania z java -jar. Możesz to zrobić bezpośrednio za pomocą Ant manifest task, lub prawdopodobnie istnieje wiele innych sposobów, aby to zrobić, w tym budowanie go z istniejącej ścieżki klas.

Ewentualnie spróbuj

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

ile używasz niestandardowej classloader lub coś podobnego JarJar, to nie można pakiet JAR zewnętrznych wewnątrz wykonywalnego JAR. Plik manifestu będzie musiał wyświetlić ścieżkę klasy, ale JVM będzie szukać JAR-ów, które umieścisz w tym samym katalogu, co plik wykonywalny JAR, a nie wewnątrz pliku wykonywalnego JAR.

Powiązane problemy