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

伙计们,

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

java -jar MyApp.jar 

现在,我已将我的function分成两个jar文件 – MyCore.jar和MyApp.jar。

以下命令有效:

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

但我不能让以下工作

 java -cp "*" -jar MyApp.jar 

我得到一个ClassNotFoundException。

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

预先感谢您的帮助。

问候,
彼得

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

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

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

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

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

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

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

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

它应该适合你。

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

添加一个清单,它既指定包含main()的类,也指定类路径。 有关更多详细信息,请参阅使用清单文件:向JAR文件的类路径添加类 。

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