代码之家  ›  专栏  ›  技术社区  ›  PatPanda

Java Maven汇编插件-多个主文件

  •  0
  • PatPanda  · 技术社区  · 3 年前

    关于maven汇编插件的使用,当项目有多个主文件时,请提出一个小问题。

    首先,我有一个只有一个主要班级的项目。这个主类使用了很多依赖项。因此,我用maven汇编插件打包了一个“uber jar”。

    我知道这并不“常见”,但我想问一下技术细节。

     <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.3.0</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.my.only.one.Main</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                        <outputDirectory>./build/</outputDirectory>
                    </configuration>
                    <executions>
                        <execution>
                            <id>make-assembly</id>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    

    一切都很好,我确实得到了一个单独的jar文件,相当重,但做这项工作,如果我java-jar,它将运行唯一一个Main fine,非常高兴。

    现在,我们有多个主文件。当然,使用完全相同的maven配置,即使编译了jar,在运行jar时,也只运行main。

     <manifest>
                                <mainClass>com.my.only.one.Main</mainClass>
                            </manifest>
    

    因此,我正在做一件我认为非常愚蠢的事情。 当我想运行第二个main时,我将maven文件更改为

     <manifest>
                                <mainClass>com.my.second.MainFile</mainClass>
                            </manifest>
    

    然后,让它编译、构建、复制jar,将其名称更改为“secondMain”,然后在第一个和第二个主文件之间来回更改代码,创建jar。

    我觉得这很愚蠢,我想知道正确的表演方式是什么?

    非常感谢。

    0 回复  |  直到 3 年前
        1
  •  0
  •   PatPanda    3 年前

    解决方案是:

    <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <version>3.3.0</version>
                    <executions>
                        <execution>
                            <id>build-one</id>
                            <configuration>
                                <archive>
                                    <manifest>
                                        <mainClass>com.my.only.one.Main</mainClass>
                                    </manifest>
                                </archive>
                                <descriptorRefs>
                                    <descriptorRef>jar-with-dependencies</descriptorRef>
                                </descriptorRefs>
                                <finalName>${project.artifactId}-one</finalName>
                                <outputDirectory>./some-dir/</outputDirectory>
                            </configuration>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                        <execution>
                            <id>build-two</id>
                            <configuration>
                                <archive>
                                    <manifest>
                                        <mainClass>com.my.second.MainFile</mainClass>
                                    </manifest>
                                </archive>
                                <descriptorRefs>
                                    <descriptorRef>jar-with-dependencies</descriptorRef>
                                </descriptorRefs>
                                <finalName>${project.artifactId}-two</finalName>
                                <outputDirectory>./some-dir/</outputDirectory>
                            </configuration>
                            <phase>package</phase>
                            <goals>
                                <goal>single</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>