2013-05-17 46 views
3

结构在我的罐子是:类路径清单不工作的文件

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 

(空行存在)

当我跑我的罐子作为:java -jar my.jar

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

有什么不对?

回答

7

有什么不对?

您已经将jar依赖关系打包到您的主jar文件中。 Class-Path的用意是向类路径中添加一个外部jar,路径相对于主jar的位置。

标准Java类加载器不支持在jar中打包jar。不过,如果你愿意,你可以将内部罐子爆炸到主罐子中。 Maven可以为你做这件事。

+0

那么如何给需要与新jar打包的依赖jar的相对路径? –

+0

简单的答案是你不能。解决方法可能是将它们打包为Zip,并将相关的jar包装在子文件夹中。然后,您可以在主jar的清单中添加Class-Path:子文件夹/ RXTXcomm.jar。 – Raza

1

RXTXcomm.jar一定不能在jar文件中,而是在它之外。阅读the tutorial