如果通过-jar命令启动jar会抛出错误,但-cp工作正常

时间:2014-01-11 19:01:37

标签: java jar classpath itext manifest.mf

我正在构建一个jar文件的奇怪问题,我想知道是否有人可以指向任何手册或知识库文章,这可以解释它... 无论如何,我的应用程序引用外部iText-2.0.8.jar,它与我的输出jar位于同一目录中:   OUT_DIR:     - my.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清楚地表明了类路径错误...

1 个答案:

答案 0 :(得分:0)

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

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