问题描述
在一个Maven多模块项目中,我在子模块打包后运行时遇到了一个问题,提示找不到Spring Boot应用的主类。尽管我已经在子模块的pom.xml
中明确指定了主类,但问题依然存在。
尝试解决
最初,我认为问题可能出在子模块的pom.xml
配置上。于是,我在pom.xml
中设置了主类:
<properties>
<start-class>com.example.MainApplication</start-class>
</properties>
然而,问题依然存在,打包时仍然提示找不到主类。这让我意识到,问题可能并不仅仅是主类配置的问题。
深入排查
接下来,我决定从更高的层级入手,检查父模块的pom.xml。在查看父模块的插件配置时,我发现了如下配置:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
这行代码意味着父模块在执行构建时,跳过了spring-boot-maven-plugin
插件的执行。由于子模块继承了父模块的配置,也导致子模块在打包时跳过了这个插件,最终导致了主类无法找到的问题。
解决方案
为了解决这个问题,我在子模块的pom.xml
中重写了父模块的配置,将<skip>
设置为false
,确保插件在子模块中正常执行:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
这样,子模块的打包过程就不会再跳过spring-boot-maven-plugin
插件,问题也得到了成功解决。
总结与教训
这次错误提醒我,在多模块项目中,父模块的配置会直接影响到子模块。在遇到问题时,不仅要检查子模块的配置,还要注意父模块的全局配置。尤其是在插件的执行上,任何跳过或禁用的配置都可能导致意想不到的后果。今后,在配置多模块项目时,我会更加谨慎,确保所有模块的配置都符合预期。