运行命令行JAR文件,并指定类路径运行命令行JAR文件,并指定类路径(Run a JAR file

2019-05-08 18:47发布

我已经编制了一个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文件,并指定类路径使用?

Answer 1:

当您指定-jar那么-cp参数将被忽略。

从文档 :

您也可以不是“包括”所需的JAR文件到另一个jar文件(你需要提取其内容并把.class文件到您的jar文件)

你有两个选择:

  1. 包括来自所有jar文件lib目录到清单(你可以使用相对路径存在)
  2. 指定使用命令行的一切( 包括你的罐子) -cp
    java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main


Answer 2:

运行jar文件,并指定这样的类路径:

java -cp <jar_name.jar:libs/*> com.test.App

jar_name.jar是要执行的JAR文件的全名

libs/*是你所依赖的JAR文件的路径

com.test.App是从具有所述JAR类的完全合格的名称main(String[])方法

罐子和依赖的jar应该有执行权限。



Answer 3:

您可以在UNIX shell中做这些:

java -cp MyJar.jar:lib/* com.somepackage.subpackage.Main

您可以在Windows PowerShell中做这些:

java -cp "MyJar.jar;lib\*" com.somepackage.subpackage.Main


Answer 4:

另外,使用清单,如果你想指定类路径和主类,所以那么你并不需要使用-cp或指定的主类。 在你的情况下,它会包含这样几行:

Main-Class: com.test.App
Class-Path: lib/one.jar lib/two.jar

不幸的是,你需要拼出每个罐子在清单(不是大问题,你只能做一次,你可以使用脚本来构建文件,或使用像Ant或Maven或摇篮构建工具)。 和参考必须是一个相对或绝对目录到您运行java -jar MyJar.jar

然后执行它

java -jar MyJar.jar


文章来源: Run a JAR file from the command line and specify classpath