chatgpt 告诉我使用<executions>指定多个<execution>配置不同的 mainClass 来实现配置多入口分别构建 jar 包。
以下是示例:
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>com.example.MainClass1</mainClass> </configuration> </execution> <execution> <id>second-entry-point</id> <goals> <goal>repackage</goal> </goals> <configuration> <mainClass>com.example.MainClass2</mainClass> <classifier>second</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build> --------------- 按照以上配置方式,运行报错“Unable to find a single main class from the following candidates”,原因是项目中有两个 main Class. 而无法实现单一项目分开打包,请教有何解决方法? 谢谢! 1
gongshw 2023-05-15 18:11:43 +08:00 1
方案一:使用多个子模块
方案二:在 pom.xml 中使用变量,并在执行 maven 命令时传递 |
2
lchqfnu OP @gongshw 感谢兄弟!第一个方案有想过,项目不复杂,一旦使用子模块,管理起来显得繁琐。第二个方案,是指的 maven 插件设置不同的 phase 来出发不同配置的 goal 吗?
|
3
crazyweeds 2023-05-15 18:42:48 +08:00 1
你不好好写,我也不好好写,毕竟我是复制你的,哈哈。
<properties> <mainClass>子模块配置这个<mainClass> <properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>default-cli</id> <configuration> <mainClass>com.example.MainClass1</mainClass> </configuration> </execution> <execution> <id>second-entry-point</id> <goals> <goal>repackage</goal> </goals> <configuration> <mainClass>${mainClss}</mainClass> <classifier>second</classifier> </configuration> </execution> </executions> </plugin> </plugins> </build> |
4
lchqfnu OP @crazyweeds 首先,感谢!但是我按你的方式尝试,还是报同样的错误。
|
5
crazyweeds 2023-05-15 19:17:31 +08:00 1
@lchqfnu 这是 parent 模块
<build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>${spring-boot-dependencies.version}</version> <configuration> <mainClass>${mainClass}</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build> 这是子模块: <properties> <mainClass>cloud.pibox.ProxyApplication</mainClass> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> |
6
gongshw 2023-05-15 19:28:23 +08:00 1
@lchqfnu
pom.xml 中可以使用变量, 比如 <mainClass>${applicationMainClass}</mainClass> 然后执行命令是用 -D 传递变量参数: maven install -DapplicationMainClass=com.example.MainClass1 maven install -DapplicationMainClass=com.example.MainClass2 细节还需要再打磨,比如生成的 jar 文件文件名应该也可以由参数决定 |
7
lchqfnu OP 经过排查,<plugin>下首先要使用<configuration><mainClass>指定一个 main 方法,然后再使用 excutions 增加其他 mainClass 的打包方式。chatgpt 给的解决方案是错的,但稍加修改即可用。
----- 结帖,谢谢各位。 |