如何在同一个jar中使用manifest.mf类路径替换main?

时间:2012-06-08 08:41:29

标签: java classpath manifest.mf

我创建了一个包含两个主要类的可执行jar文件。所有库都包含在jar中,主Main-Class在执行时工作正常:

  

java -jar MyApplication.jar

但是当我尝试像这样运行其他主类时:

  

java -cp MyApplication.jar my.other.mainClass

它不包含manifest.mf的类路径,也找不到jar文件中的库。

是否有一种简单的方法,以便其他主类可以使用manifest.mf中的类路径?或者我应该创建两个单独的可执行jar?

3 个答案:

答案 0 :(得分:2)

您可以使用Reflection编写一个类,该类调用任何类作为其第一个参数传递的main方法 - 并将其配置为jar中的Main类。这样,您可以使用java -jar file.jar my.other.mainClass

从同一个jar中调用多个main方法

答案 1 :(得分:1)

  

是否有一种简单的方法,以便其他主类可以使用manifest.mf中的类路径?或者我应该创建两个单独的可执行jar?

仅当使用-jar选项时才使用JAR清单类路径,相反,如果未使用-jar,则命令行参数仅被解释为类名。你不能混合这两种方法。

但是,这并不意味着您必须创建第二个JAR文件。例如,您可以使用从清单和辅助入口点类名复制的类路径编写一个简单的shell脚本来启动JVM。

答案 2 :(得分:1)

你确定你的问题是关于jar 中的库吗?您使用的是哪个版本的Java?

我建议您尝试以下方法:

java -cp MyApplication.jar <add external libraries here> my.other.mainClass

因此,您只需要添加路径到jar中已经的类。您可以使用wild cards缩短列表。

这是另一个有趣的选项,Enable your unrunnable JARs to run with the java -jar command。它描述了如何在jar文件中选择一个主类并制作另一个可运行的副本。