Maven多模块项目执行spring-boot:build-image报错找不到主类如何解决?
问题根因
你在项目根目录直接执行mvn spring-boot:build-image时,Maven会默认对所有子模块触发该构建目标。core模块是公共依赖包,没有Spring Boot启动主类,也不需要构建为可执行镜像,因此触发了「找不到主类」的报错。mvn clean package能正常执行的原因是:默认配置下core模块只会打包为普通jar包,仅executable模块会执行Spring Boot的repackage逻辑生成可执行jar,不会涉及无主类的校验逻辑。
解决方案
方案1:执行命令时指定模块(无需修改配置,推荐临时使用)
在构建命令中通过-pl参数指定仅对executable模块执行build-image目标:
mvn spring-boot:build-image -pl executable
方案2:全局配置跳过非启动模块的插件执行(适合固定项目配置)
- 在根pom.xml中添加pluginManagement配置,默认跳过所有子模块的spring-boot-maven-plugin执行:
<build> <pluginManagement> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </pluginManagement> </build>
- 修改executable模块的pom.xml中插件配置,关闭跳过并绑定构建目标:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <skip>false</skip> </configuration> <executions> <execution> <goals> <goal>repackage</goal> <goal>build-image</goal> </goals> </execution> </executions> </plugin>
配置完成后,直接在根目录执行mvn spring-boot:build-image即可自动跳过core模块,仅对executable模块构建镜像。
方案3:切换到executable模块目录执行命令
先在根目录执行mvn clean install完成所有模块的安装,再进入executable模块目录执行mvn spring-boot:build-image即可。
内容的提问来源于stack exchange,提问作者Rauuuñ
相关产品推荐
相关产品推荐

