我创建了一个包含两个主要类的可执行jar文件。所有库都包含在jar中,主Main-Class在执行时工作正常:
java -jar MyApplication.jar
但是当我尝试像这样运行其他主类时:
java -cp MyApplication.jar my.other.mainClass
它不包含manifest.mf的类路径,也找不到jar文件中的库。
是否有一种简单的方法,以便其他主类可以使用manifest.mf中的类路径?或者我应该创建两个单独的可执行jar?
答案 0 :(得分:2)
您可以使用Reflection编写一个类,该类调用任何类作为其第一个参数传递的main方法 - 并将其配置为jar中的Main类。这样,您可以使用java -jar file.jar my.other.mainClass
答案 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文件中选择一个主类并制作另一个可运行的副本。