3

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

java -jar MyApplication.jar

但是当我尝试像这样运行另一个主类时:

java -cp MyApplication.jar my.other.mainClass

它不包括 manifest.mf 的类路径,并且找不到 jar 文件中的库。

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

4

3 回答 3

2

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

于 2012-06-08T19:40:53.687 回答
1

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

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

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

于 2012-06-08T15:17:49.263 回答
1

您确定您的问题与jar中的库有关吗?你用的是什么版本的java?

我建议您尝试以下方法:

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

因此,您只需要添加 jar 中尚不存在的类的路径。您可以使用通配符来缩短列表。

这是另一个有趣的选项,使您的不可运行的 JAR 能够使用 java -jar 命令运行。它描述了如何在 jar 文件中选择一个主类并制作另一个可运行的副本。

于 2012-06-08T19:36:03.860 回答