Исключение в потоке "main" java.lang.NoClassDefFoundError: org / joda / time / ReadableInstant - PullRequest
5 голосов
/ 24 августа 2011

Я создал исполняемый jar-файл, используя ant-скрипт, единственный внешний jar-файл, который я использовал, был joda-time 2.0. Казалось, что скрипт сборки ant работает, поскольку я не получил никаких ошибок компиляции, и если бы я удалил jode-time 2.0.jar из каталога lib, сборка действительно завершилась бы так, как ожидалось. Во всяком случае, после создания банки я получаю эту ошибку при попытке запустить с:

java -jar myapp.jar

Исключение в потоке "main" java.lang.NoClassDefFoundError: org / joda / time / ReadableInstant

Есть мысли по этому поводу? Я просто не уверен, где искать, в Eclipse все отлично работает. спасибо за любые идеи

Ответы [ 2 ]

9 голосов
/ 24 августа 2011

Предположительно, в вашем фляге нет заголовка манифеста , говорящего Java о добавлении фляги joda-time в путь к классам. Это единственный способ иметь другие записи пути к классам при использовании java -jar. Вы можете сделать это напрямую с помощью манифеста Ant , или, возможно, есть несколько других способов сделать это, включая сборку из существующего пути к классам.

Попробуй

java -cp myapp.jar:joda-time-2.0.jar com.foo.YourMainClass
2 голосов
/ 24 августа 2011

Если вы не используете собственный загрузчик классов или что-то вроде JarJar, то вы не можете связывать внешние JAR-файлы внутри исполняемого JAR-файла.В вашем файле манифеста должен быть указан путь к классам, но JVM будет искать JAR-файлы, которые вы перечисляете, в том же каталоге, что и ваш исполняемый JAR, а не внутри вашего исполняемого JAR.

...