如何从 Jar 运行一个类,该类不是其清单文件中的主类

2022-08-31 06:03:25

我有一个包含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

我知道我可以在清单文件中指定一个类作为main。但是,有没有办法在命令行上指定一些参数来运行我想要运行的任何类?

我试过这个:

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”是命令行参数)。


答案 1

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

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

答案 2

您可以执行任何具有 JAR 文件方法的类,即使 jar 文件定义了 Main-Classpublic static void main

执行主类:

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

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

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

注:第一次使用,第二次使用。-jar-cp


推荐