【问题标题】:Can't find dependent libraries in jar在jar中找不到依赖库
【发布时间】:2016-04-03 02:10:19
【问题描述】:

我的 java 项目使用 javax.mail.jar。因此,在 netbeans 中,我创建了一个新文件夹 Libraries,将 jar 文件复制到那里并将其添加到项目属性中。我将此文件夹添加到 git,这在 netbeans 上运行良好。但是当我在另一台机器上用 ant 构建项目并用

运行项目 jar
java -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


【解决方案1】:

清单中的 ClassPath 指向 jar 之外的文件系统。 不能在罐子里使用罐子

https://docs.oracle.com/javase/tutorial/deployment/jar/downman.html

【讨论】:

    猜你喜欢
    • 2017-05-03
    • 2022-01-16
    • 1970-01-01
    • 2020-08-14
    • 2015-03-31
    • 2013-06-20
    • 2015-08-21
    • 2019-08-05
    • 2014-08-26
    相关资源
    最近更新 更多