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

Maven filtering变量替换:如何实现Jar内嵌War包中version.txt变量替换

问题核心原因

你当前的资源过滤配置如果是写在外层打Jar的pom中,只会作用于外层Jar项目的资源,不会触发内层War包构建阶段的变量替换。另外你贴出的pom配置本身存在语法错误,未闭合的<resource>标签也会导致配置不生效。

解决方案

按以下步骤调整即可:

  1. 修正基础资源过滤配置
    如果你是单模块项目,直接修正pom.xml里的build配置:
<build>
  <resources>
    <resource>
      <directory>src/main/config</directory>
      <filtering>true</filtering>
      <includes>
        <include>**/version.txt</include>
      </includes>
    </resource>
    <!-- 保留默认资源目录的配置,避免其他资源丢失 -->
    <resource>
      <directory>src/main/resources</directory>
      <filtering>false</filtering>
    </resource>
  </resources>
</build>

如果是多模块项目,War包是单独的子模块,就把上述配置写到War子模块的pom.xml中,不要写在外层父pom或者Jar模块的pom里。

  1. 配置maven-war-plugin开启资源过滤
    要保证version.txt在War包构建阶段就完成变量替换,需要给War插件单独添加过滤规则,比如要把version.txt打到War包根目录,配置如下:
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>3.3.2</version>
      <configuration>
        <webResources>
          <resource>
            <directory>src/main/config</directory>
            <filtering>true</filtering>
            <includes>
              <include>version.txt</include>
            </includes>
            <!-- 配置version.txt在War包中的存放路径,根目录填/,要放WEB-INF就填WEB-INF -->
            <targetPath>/</targetPath>
          </resource>
        </webResources>
      </configuration>
    </plugin>
  </plugins>
</build>
  1. 验证生效
    执行mvn package命令后,先解压生成的War包,检查里面的version.txt是否已经完成变量替换。只要War包里的内容是正确的,后续被打包进外层Jar后内容不会发生变化。

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:36:02