首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在maven构建期间,第二个主类会覆盖第一个主类。

在maven构建期间,第二个主类会覆盖第一个主类。
EN

Stack Overflow用户
提问于 2018-07-26 22:00:43
回答 1查看 88关注 0票数 0

我仍然在做一个包含两个主类的maven项目。我现在使用的是配置文件和maven汇编插件。我试过以下几种方法:

向一个清单中添加两个主类

代码语言:javascript
复制
<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>

将两个清单添加到一个归档中

代码语言:javascript
复制
<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>

将两个归档文件添加到一个执行中

代码语言:javascript
复制
<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>

使用两种不同的执行

代码语言:javascript
复制
<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的:

代码语言:javascript
复制
mvn clean package -DskipTests -P Kiwi -P Carrot

然后我像这样运行jar,在配置文件之间切换:

代码语言:javascript
复制
java -jar -Dspring.profiles.active=Kiwi target/hugeJar.jar
java -jar -Dspring.profiles.active=Carrot target/hugeJar.jar

我注意到的是,包含最后构建的main的配置文件是唯一正确运行的配置文件,而另一个配置文件没有运行。如果胡萝卜是最后造的,那么胡萝卜就会跑,而奇异果却不会。如果奇异果是最后建立的,那么奇异果会跑,而胡萝卜不会。对我应该做什么有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2018-07-26 22:28:29

根据doc,可执行jar有一个one主类,它在清单中声明如下:

代码语言:javascript
复制
Main-Class: classname

没有对多主类的支持,甚至没有多主类的概念。

您可以选择:

  1. 将项目分为3部分:
    • common stuff
    • main class 1 stuff
    • main class 2 main

  1. 使用1个主类构建,但动态调用第二个主类java -cp myjar.jar my.other.MainClass,因为这两个

的命令已经不同

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51540700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档