"main"线程中的异常:java.lang.NoClassDefFoundError:org/joda/time/ReadableInstant

6
使用ant脚本构建了一个可执行的jar文件,唯一使用的外部jar是joda-time 2.0。ant构建脚本“似乎”工作正常,因为没有收到任何编译错误,如果从lib目录中删除joda-time 2.0.jar,则构建将像预期的那样失败。无论如何,在构建jar文件后,当我尝试运行以下命令时,会出现以下错误:
java -jar myapp.jar 线程“main”中的异常java.lang.NoClassDefFoundError: org/joda/time/ReadableInstant
对此有何想法?我不确定该去哪里查找问题,但在Eclipse中一切都正常工作。谢谢任何想法。
2个回答

10

很可能,你的 jar 文件没有包含一个告诉 Java 将 joda-time jar 添加到类路径中的清单头。这是使用 java -jar 时拥有其他类路径条目的唯一方法。你可以直接使用 Ant 的manifest 任务来实现这个目标,或者可能还有其他多种方法,包括从现有的类路径中构建它。

或者,尝试:

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

2

除非您使用自定义类加载器或类似JarJar的工具,否则无法将外部JAR文件捆绑到可执行JAR文件中。您的清单文件需要列出一个类路径(classpath),但JVM将在与您的可执行JAR文件相同的目录中寻找您列出的JAR文件,而不是在您的可执行JAR文件内部查找。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接