You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:58:35