我已经编制了一个JAR文件,并在清单(我使用Eclipse 导出功能)指定主类。 我的依赖都在一个目录中名为lib
。 我似乎无法得到关于如何同时指定它应该使用执行我的JAR文件直接回答lib/*
的类路径。
我试过了:
]$ java -jar -cp .:lib/* MyJar.jar
]$ java -cp .:lib/* -jar MyJar.jar
]$ java -cp .:lib/* com.somepackage.subpackage.Main
等等...
每个给出了一个错误说:
Error: Could not find or load main class ....
或给出NoClassDefFoundError
指示库没有被发现。
我甚至尝试重塑的JAR文件,包括lib
目录和内容,但仍然没有骰子...
我怎样才能在命令行中执行一个JAR文件,并指定类路径使用?
当您指定-jar
那么-cp
参数将被忽略。
从文档 :
您也可以不是“包括”所需的JAR文件到另一个jar文件(你需要提取其内容并把.class文件到您的jar文件)
你有两个选择:
- 包括来自所有jar文件
lib
目录到清单(你可以使用相对路径存在) - 指定使用命令行的一切( 包括你的罐子)
-cp
:
java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
运行jar文件,并指定这样的类路径:
java -cp <jar_name.jar:libs/*> com.test.App
jar_name.jar
是要执行的JAR文件的全名
libs/*
是你所依赖的JAR文件的路径
com.test.App
是从具有所述JAR类的完全合格的名称main(String[])
方法
罐子和依赖的jar应该有执行权限。
您可以在UNIX shell中做这些:
java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main
您可以在Windows PowerShell中做这些:
java -cp "MyJar.jar;lib\*" com.somepackage.subpackage.Main
另外,使用清单,如果你想指定类路径和主类,所以那么你并不需要使用-cp
或指定的主类。 在你的情况下,它会包含这样几行:
Main-Class: com.test.App
Class-Path: lib/one.jar lib/two.jar
不幸的是,你需要拼出每个罐子在清单(不是大问题,你只能做一次,你可以使用脚本来构建文件,或使用像Ant或Maven或摇篮构建工具)。 和参考必须是一个相对或绝对目录到您运行java -jar MyJar.jar
。
然后执行它
java -jar MyJar.jar