我仍然在做一个包含两个主类的maven项目。我现在使用的是配置文件和maven汇编插件。我试过以下几种方法:
向一个清单中添加两个主类
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>CombineMains</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>combineMains</finalName>
<archive>
<manifest>
<mainClass>com.fruit.Kiwi</mainClass>
<mainClass>com.vegetable.Carrot</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>将两个清单添加到一个归档中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>CombineMains</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>combineMains</finalName>
<archive>
<manifest>
<mainClass>com.fruit.Kiwi</mainClass>
</manifest>
<manifest>
<mainClass>com.vegetable.Carrot</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>将两个归档文件添加到一个执行中
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>CombineMains</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>combineMains</finalName>
<archive>
<manifest>
<mainClass>com.fruit.Kiwi</mainClass>
</manifest>
</archive>
<archive>
<manifest>
<mainClass>com.vegetable.Carrot</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>使用两种不同的执行
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>Main1</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>kiwi</finalName>
<archive>
<manifest>
<mainClass>com.fruit.Kiwi</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
<execution>
<id>Main2</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<finalName>carrot</finalName>
<archive>
<manifest>
<mainClass>com.vegetable.Carrot</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>不幸的是,这些解决方案不起作用。每种解决方案都会发生同样的事情。第二个mainClass会覆盖第一个。我是这样构建jar的:
mvn clean package -DskipTests -P Kiwi -P Carrot然后我像这样运行jar,在配置文件之间切换:
java -jar -Dspring.profiles.active=Kiwi target/hugeJar.jar
java -jar -Dspring.profiles.active=Carrot target/hugeJar.jar我注意到的是,包含最后构建的main的配置文件是唯一正确运行的配置文件,而另一个配置文件没有运行。如果胡萝卜是最后造的,那么胡萝卜就会跑,而奇异果却不会。如果奇异果是最后建立的,那么奇异果会跑,而胡萝卜不会。对我应该做什么有什么建议吗?
发布于 2018-07-26 22:28:29
根据doc,可执行jar有一个one主类,它在清单中声明如下:
Main-Class: classname没有对多主类的支持,甚至没有多主类的概念。
您可以选择:
java -cp myjar.jar my.other.MainClass,因为这两个的命令已经不同
https://stackoverflow.com/questions/51540700
复制相似问题