【问题标题】:ClassPath in manifest does not work清单中的 ClassPath 不起作用
【发布时间】:2013-05-12 16:45:06
【问题描述】:

我的 jar 中的文件结构是:

com/my/Main.class
META-INF/MANIFEST.MF
RXTXcomm.jar

Manifest.mf 包含:

Manifest-Version: 1.0
Main-Class: com.my.Main
Class-Path: RXTXcomm.jar

(存在空行)

当我将 jar 运行为:java -jar my.jar

我得到:Exception in thread "main" java.lang.NoClassDefFoundError: gnu/io/SerialPortEventListener

怎么了?

【问题讨论】:

    标签: java classpath manifest.mf


    【解决方案1】:

    RXTXcomm.jar 不能在 jar 文件内,而应在 jar 文件外。阅读the tutorial

    【讨论】:

      【解决方案2】:

      怎么了?

      您已将 jar 依赖项打包到主 jar 中。 Class-Path 的目的是在类路径中添加一个外部 jar,其路径相对于主 jar 的位置。

      标准 Java 类加载器不支持在 jar 中打包 jar。不过,如果你愿意,你可以将内罐炸成主罐。 Maven 可以为您做到这一点。

      【讨论】:

      • 那么如何给出需要与新jar打包的依赖jar的相对路径呢?
      • 简单的答案是你不能。解决方法可能是将它们打包为 Zip,并将依赖 jar 放在子文件夹中。然后你可以在main jar的manifest中添加Class-Path: subfolder/RXTXcomm.jar。
      猜你喜欢
      • 2014-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      相关资源
      最近更新 更多