Java一起使用"-cp"和"-jar"

Pet*_*ter 7 java

伙计们,

早些时候,我只有一个jar文件,并设置了清单,以便我可以简单地运行我的程序:

 java -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)

现在,我已将我的功能分成两个jar文件 - MyCore.jar和MyApp.jar.

以下命令有效:

java -cp "*" com.mycompany.mypackage.App
Run Code Online (Sandbox Code Playgroud)

但我不能让以下工作

java -cp "*" -jar MyApp.jar
Run Code Online (Sandbox Code Playgroud)

我得到一个ClassNotFoundException.

我更喜欢使用"-jar"开关.有没有办法让它发挥作用?

预先感谢您的帮助.

问候,
彼得

luc*_*web 10

根据Java cli 文档,您不能在同一命令中组合-cp和-jar

-jar执行封装在JAR存档中的程序.第一个参数是JAR文件的名称而不是启动类名称.为了使此选项起作用,JAR文件的清单必须包含Main-Class:classname形式的一行.这里,classname标识具有public static void main(String [] args)方法的类,该方法充当应用程序的起点.有关使用Jar文件和Jar文件管理器的信息,请参阅Jar工具参考页面和Java Tutorial的Jar跟踪.使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置.请注意,可以使用"java -jar"选项运行的JAR文件可以设置其执行权限,以便可以在不使用"java -jar"的情况下运行它们.请参阅Java Archive(JAR)文件.

为了解决这个问题,您需要确保应用程序jar中的清单引用包含主文件的Class和类路径.


Log*_*gan 6

我有一个这样的 Manifest.mf 文件。

Manifest-Version: 1.0
Main-Class: com.mycompany.mypackage.App
Class-Path: MyApp.jar MyCore.jar log4j.jar 
Run Code Online (Sandbox Code Playgroud)

您可以将所需的任何 jar 文件添加到 Class-Path 行。然后只要 jars 在类路径中,您就可以运行 java -jar 命令而无需 -cp。


小智 5

假设两个 jar 文件都在同一个文件夹中并且com.mycompany.mypackage.App是主应用程序类,请尝试以下命令:

java -cp MyCore.jar;MyApp.jar com.mycompany.mypackage.App
Run Code Online (Sandbox Code Playgroud)

它应该适合你。

如果您坚持使用-jarswitch(为什么?),那么您需要修改您的清单文件,添加Class-Path密钥并指定所有相关 jar 文件的路径。如果 jar 文件未与您的主应用程序 jar 文件打包,它会使您的应用程序不那么灵活。