Spring项目创建Maven子模块后application.properties被忽略问题解决
解决Spring Boot多模块Maven中application.properties被忽略的问题
我最近碰到一个挺棘手的Spring Boot多模块Maven问题,折腾了好一会儿才找到根源,跟大家分享下整个过程:
问题场景
最开始用Spring Initializr创建了一个单模块Spring Boot项目,在application.properties里设置了server.port=9090,启动完全正常,端口也符合预期。
后来为了拆分代码,在IntelliJ里给项目加了一个Maven子模块(叫common,就是个纯Maven结构,啥业务代码和配置都没加),结果怪事发生了:主项目启动时直接忽略了application.properties,默认用8080端口启动,我的配置完全没生效。
排查过程
一开始以为是子模块的配置冲突,但common模块啥都没加,这可能性直接排除。后来一步步试,终于发现问题出在子模块的packaging配置上:
- 我之前给所有子模块都设置了
<packaging>pom</packaging>,结果主项目的资源文件(包括application.properties)根本不会被加载 - 试着把子模块的
packaging标签删掉,主项目的配置倒是正常生效了,但执行mvn clean install时又报错,说找不到其他子模块的jar依赖 - 最后才反应过来:我居然把父模块和子模块的打包方式都设成了
pom,这完全是错的!
解决方案
只保留父模块的packaging配置为pom,把所有子模块的<packaging>pom</packaging>配置全部移除。
这么调整之后:
- 主项目启动时正常读取
application.properties,用9090端口启动 - 执行
mvn clean install也能顺利完成,子模块的依赖也能正常被识别和引用
总结
划个重点:Maven多模块项目中,只有父模块需要设置packaging为pom,子模块不需要额外配置这个属性(默认就是jar打包,刚好满足子模块作为依赖被主项目引用的需求)。
内容的提问来源于stack exchange,提问作者Andrea Calin
相关产品推荐
相关产品推荐

