如何从 Jar 运行一个不在其 Manifest 文件中的 Main-Class 的类

新手上路,请多包涵

我有一个包含 4 个类的 JAR,每个类都有 Main 方法。我希望能够根据需要运行其中的每一个。我正在尝试从 Linux 机器上的命令行运行它。

 E.g. The name of my JAR is MyJar.jar

主要类的目录结构如下:

 com/mycomp/myproj/dir1/MainClass1.class
com/mycomp/myproj/dir2/MainClass2.class
com/mycomp/myproj/dir3/MainClass3.class
com/mycomp/myproj/dir4/MainClass4.class

我知道我可以在我的清单文件中指定一个类作为主类。但是有什么方法可以让我在命令行上指定一些参数来运行我想运行的任何类?

我试过这个:

 jar cfe MyJar.jar com.mycomp.myproj.dir2.MainClass2 com/mycomp/myproj/dir2/MainClass2.class /home/myhome/datasource.properties /home/myhome/input.txt

我得到了这个错误:

 com/mycomp/myproj/dir2/MainClass2.class : no such file or directory

(在上述命令中,’/home/myhome/datasource.properties’ 和 ‘/home/myhome/input.txt’ 是命令行参数)。

原文由 Bhushan 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 747
2 个回答

您可以在其 Manifest 文件中创建没有 Main-Class 的 jar。然后 :

 java -cp MyJar.jar com.mycomp.myproj.dir2.MainClass2 /home/myhome/datasource.properties /home/myhome/input.txt

原文由 lxu4net 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以从 JAR 文件执行 任何 具有 public static void main 方法的类, _即使该 jar 文件具有 Main-Class 定义_。

执行主类:

 java -jar MyJar.jar  // will execute the Main-Class

使用 public static void main 方法执行另一个类:

 java -cp MyJar.jar com.mycomp.myproj.AnotherClassWithMainMethod

注意:第一个使用 -jar ,第二个使用 -cp

原文由 fadedbee 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题