我有一个结构很喜欢的项目:
root/
-- lib/
---- commons-cli-1.2.jar
-- src/
---- my/package/name/*.java
-- bin/
---- my/package/name/*.class
-- .classpath
-- .project
-- manifest.mf
*.class
中的bin/
文件是由Eclipse构建的。我的.classpath
包含lib/
,编译得很好;它也可以作为“Java应用程序”运行,并且可以使用我当前的存根。
当我尝试创建JAR并包含lib/
依赖项时,会出现问题。从我发出的命令行:
jar cvfm prog.jar manifest.mf -C bin/ .
程序构建,然后当我尝试运行java -jar prog.jar
时,我得到:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/Option...
(还有更多,但我无法从其他机器复制)
我的manifest.mf
看起来像是:
Manifest-Version: 1.0
Main-Class: my.package.Main
Class-Path: ./lib/commons-cli-1.2.jar
我觉得Class-Path
没有被包含在内,而JAR找不到commons-cli-1.2.jar
中包含的类。我把它与JAR创建隔离开来,因为我可以毫无问题地运行已编译的类。
在创建JAR并包含lib/*.jar
?