Spring Boot项目Gradle转Maven后Maven无法加载主类咨询
这种找不到主类的问题在Gradle转Maven的Spring Boot项目里真的挺常见的,我整理了几个最可能的原因,你可以挨个排查试试:
Spring Boot Maven插件配置问题
Spring Boot项目要打包成可执行Jar,必须依赖spring-boot-maven-plugin来处理主类配置和Fat Jar的构建。如果你的父pom或admin模块的pom里没配置这个插件,或者配置有误,就会出现找不到主类的情况。
检查是否在pom中添加了正确的插件配置,尤其是repackage目标和主类指定:<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>对应你的Spring Boot版本</version> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> <configuration> <mainClass>com.mycompany.dr3.admin.Application</mainClass> </configuration> </plugin> </plugins> </build>如果父pom已经配置了插件,确认admin模块是否正确继承了父pom的配置,没有被意外覆盖。
主类的声明或路径错误
虽然你说主类已正确声明,但还是仔细核对下细节:- 确认Application类的包路径确实是
com.mycompany.dr3.admin(注意大小写,Java对包名和类名大小写敏感); - 类上是否标注了
@SpringBootApplication注解?这个注解是Spring Boot识别主类的关键标识,缺失的话插件可能无法自动检测到主类; - 类名是否确实是Application,有没有拼写错误。
- 确认Application类的包路径确实是
Jar包结构异常
转Maven后打包的Jar可能不是标准的Spring Boot可执行Fat Jar,或者类文件没被正确打包进去。你可以用命令jar tf your-admin-jar-file.jar查看Jar内容:- 检查是否存在
BOOT-INF/classes/com/mycompany/dr3/admin/Application.class文件,如果没有,说明编译后的类文件没被纳入打包范围,可能是Maven的源码目录配置错误(默认是src/main/java,如果你的代码在其他目录,需要在pom中指定<sourceDirectory>); - 检查
META-INF/MANIFEST.MF文件,里面必须包含Main-Class和Start-Class属性,正确的内容应该类似:
这两个属性缺失或值错误都会导致找不到主类。Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: com.mycompany.dr3.admin.Application
- 检查是否存在
多模块项目的聚合/依赖配置错误
如果dr3是多模块项目,检查父pom的<modules>节点是否包含了admin模块,同时admin模块的pom是否正确设置了<parent>指向父pom。如果模块间的依赖或聚合关系配置错误,会导致admin模块的编译、打包过程异常,进而主类无法被正确包含。Maven缓存或残留文件干扰
之前Gradle构建的残留文件或者Maven本地仓库的缓存可能会影响构建结果。尝试以下操作:- 执行
mvn clean package,先清理所有编译和打包的残留文件,再重新构建; - 删除本地Maven仓库中dr3项目相关的目录(比如
~/.m2/repository/com/mycompany/dr3),然后重新执行mvn install拉取依赖并构建。
- 执行
主类不在Maven编译范围内
检查admin模块的pom中是否自定义了<sourceDirectory>或<resources>配置,如果主类所在的目录没有被纳入Maven的编译路径,编译后就不会生成对应的.class文件,自然找不到主类。比如如果代码放在非默认目录,需要显式配置:<build> <sourceDirectory>src/main/custom-java</sourceDirectory> </build>
内容的提问来源于stack exchange,提问作者Logan Wlv

