我使用ant脚本构建了一个可执行jar,我使用的唯一外部jar是joda-time 2.0。 ant构建脚本“似乎”工作,因为我没有收到任何编译错误,如果我要从lib目录中删除jode-time 2.0.jar,那么构建确实会按预期失败。无论如何,在构建jar之后,当我尝试运行时出现此错误:
java -jar myapp.jar
线程“main”中的异常java.lang.NoClassDefFoundError:org / joda / time / ReadableInstant
对此有何想法?我只是不确定在哪里看,在Eclipse中一切正常。感谢任何想法
答案 0 :(得分:9)
据推测,你的jar不包含manifest header告诉Java将joda-time jar添加到类路径中。这是使用java -jar
时获得其他类路径条目的唯一方法。您可以直接使用Ant manifest task执行此操作,或者可能有多种其他方法可以执行此操作,包括从现有类路径构建它。
或者,尝试
java -cp myapp.jar:joda-time-2.0.jar com.foo.YourMainClass
答案 1 :(得分:2)
除非您使用自定义类加载器或JarJar之类的东西,否则您无法在可执行JAR中捆绑外部JAR。您的清单文件需要列出类路径,但JVM将查找您在可执行JAR所在目录中列出的JAR,而不是可执行JAR中的JAR。