【问题标题】:jar throws errors if launched via -jar command, but -cp works fine如果通过 -jar 命令启动 jar 会引发错误,但 -cp 可以正常工作
【发布时间】:2014-01-30 17:44:54
【问题描述】:

我正在构建的 jar 文件有一个奇怪的问题,我想知道是否有人可以向我指出任何手册或知识库文章,这将解释它...... 无论如何,我的应用程序正在引用与我的输出 jar 位于同一目录中的外部 iText-2.0.8.jar: OUT_DIR: - 我的.jar - iText-2.0.8.jar my.jar 中的主类是 com.company.Main 并且每当我尝试运行时

java -cp "my.jar;iText-2.0.8.jar" com.company.Main

我的应用程序运行良好。但是一旦我尝试运行:

java -jar my.jar

我收到来自 iText-2.0.8.jar 的类的 NoClassDefFoundError 这是 my.jar 的清单:

Manifest-Version: 1.0
Main-Class: com.company.Main
Class-Path: iText-2.0.8.jar

Name: rabbitmq-client
Specification-Title: AMQP
Specification-Version: 0.9.1
Specification-Vendor: AMQP Working Group (www.amqp.org)
Implementation-Title: RabbitMQ
Implementation-Version: 3.1.3
Implementation-Vendor: Rabbit Technologies Ltd. (www.rabbitmq.com)

这是否与 iText jar 也可运行有关(它有自己的主类)?另一方面,NoClassDefFoundError 清楚地表明类路径错误...

【问题讨论】:

  • 您是如何生成此清单的?手动还是通过一些构建工具?
  • 我正在使用 Intellij IDEA 和一个大型 Ant build.xml 文件。清单部分如下所示:

标签: java jar classpath itext manifest.mf


【解决方案1】:

-cp 参数设置类路径。问题是您必须在运行时依赖项中包含 iText.jar。当您在未指定类路径的情况下运行时,您会收到 NoClassDefFound 错误,这是完全正常的行为。根据手动创建清单文件,您可能有问题。更好的选择是让 IntelliJ IDEA 为您生成它。为此,您必须:

  1. 在主菜单上,选择 Build |生成 Ant 构建。
  2. 确保您已选中“内联运行时类路径”复选框
  3. 好的

【讨论】:

  • 我已经这样做了,但不知何故它甚至没有向我的 jar 目标添加 条目,所以我不得不手动添加它......
猜你喜欢
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 2012-09-05
  • 2018-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多