Java一起使用“-cp”和“-jar”

时间:2012-08-21 02:35:41

标签: java

民间,

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

 java -jar MyApp.jar

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

以下命令有效:

java -cp "*" com.mycompany.mypackage.App

但我无法让以下工作

java -cp "*" -jar MyApp.jar

我得到一个ClassNotFoundException。

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

提前感谢您的帮助。

的问候,
彼得

4 个答案:

答案 0 :(得分:10)

根据Java cli documentation,您无法在同一命令中组合-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和类路径。

答案 1 :(得分:4)

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

Manifest-Version: 1.0
Main-Class: com.mycompany.mypackage.App
Class-Path: MyApp.jar MyCore.jar log4j.jar 

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

答案 2 :(得分:4)

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

java -cp MyCore.jar;MyApp.jar com.mycompany.mypackage.App

它应该适合你。

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

答案 3 :(得分:3)

添加一个清单,它既指定包含main()的类,也指定类路径。有关详细信息,请参阅Working with Manifest Files: Adding Classes to the JAR File's Classpath

然后整个应用程序。可以使用-jar启动,无需-cp