【发布时间】:2016-04-03 02:10:19
【问题描述】:
我的 java 项目使用 javax.mail.jar。因此,在 netbeans 中,我创建了一个新文件夹 Libraries,将 jar 文件复制到那里并将其添加到项目属性中。我将此文件夹添加到 git,这在 netbeans 上运行良好。但是当我在另一台机器上用 ant 构建项目并用
运行项目 jarjava -jar myproject.jar
我得到了错误
线程“主”java.lang.NoClassDefFoundError 中的异常: javax/mail/MessagingException
我可以看到 myproject.jar 包含依赖库
$jar tf TakServer.jar
图书馆/
库/javax.mail.jar
...
我不确定出了什么问题。知道如何让它运行吗?
解决方案:正如@Gimby 所指出的,来自 Netbeans 和 ant build 的 jar 文件是不同的。 Netbeans 包含一个 lib/ 文件夹,其中包含 dist/ 文件夹中的所有依赖项,并且其 MANIFEST.ML 将 lib/ 添加到类路径。主jar里面的Libraries文件夹根本不用。
【问题讨论】:
-
如果没记错的话,我认为您的 JAR 中应该有一个 MANIFEST.xml 文件。它应该包含您的依赖项列表。
-
@nixgeek 列出你在
MANIFEST.xml中的所有JAR依赖 -
这个 jar 到底是如何进入主 jar 的?这不是类路径加载的工作方式,除非有一些底层的非标准机制首先提取依赖项。
-
@npinti, Mr.Arjun 只有 MANIFEST.MF 但没有 MANIFEST.xml 它的内容是“Manifest-Version: 1.0 Ant-Version: Apache Ant 1.9.3 Created-By: 1.7.0_85 -b01 (Oracle Corporation) X-COMMENT: Main-Class will be added by build Main-Class: tak.TakServer"
-
@Gimby 在 netbeans 中,包装下有一个“复制依赖库”选项。我认为因此依赖 jar 文件存在于主 jar 中。
标签: java netbeans ant jar classpath