Maven Resources Plugin升级至2.4+后属性无法替换问题求助
解决maven-resources-plugin 2.4+版本属性无法替换的问题
这问题我维护老项目升级时也碰到过,maven-resources-plugin从2.3升到2.4+后,默认的资源过滤逻辑做了调整,导致你Profile里定义的属性没法正常替换占位符了。下面给你几个实用的解决方案:
方案1:修改插件配置,恢复2.3版本的占位符识别逻辑
2.4版本之后,插件默认使用@作为占位符的分隔符(比如@prop.server.port@),不再默认识别${}格式。如果你不想修改资源文件的内容,可以显式配置插件开启默认分隔符支持:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.3.1</version> <!-- 替换成你要升级到的目标版本 --> <configuration> <!-- 开启Maven默认的${}分隔符识别 --> <useDefaultDelimiters>true</useDefaultDelimiters> </configuration> </plugin> </plugins> </build>
这个配置会让插件回到2.3版本的行为,自动用Profile里的属性替换${prop.xxx}格式的占位符。
方案2:修改资源文件的占位符格式(推荐)
这是插件新版本推荐的做法,既能避免和Spring等框架的${}占位符冲突,又符合插件的默认配置。只需要把application.properties里的占位符改成@包裹的格式:
server.contextPath=/rsc/ server.port=@prop.server.port@ trac.datasource.url=@prop.trac.datasource.url@
不需要修改插件配置,直接执行编译打包,插件就会自动用Profile里的属性替换这些占位符。
方案3:确保资源文件被纳入过滤范围
有时候升级插件后,资源过滤的默认配置可能被重置,需要显式指定要过滤的文件:
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <!-- 只过滤需要替换属性的文件,提升构建效率 --> <includes> <include>application.properties</include> </includes> </resource> </resources> </build>
这个配置会告诉插件,对src/main/resources下的application.properties执行属性替换操作,避免插件忽略了这个文件。
你可以根据自己的项目情况选择适合的方案,我个人更推荐方案2,毕竟是官方新版本的设计方向,能减少后续的兼容性问题。
内容的提问来源于stack exchange,提问作者Ildelian
相关产品推荐
相关产品推荐

