Maven filtering变量替换:如何实现Jar内嵌War包中version.txt变量替换
问题核心原因
你当前的资源过滤配置如果是写在外层打Jar的pom中,只会作用于外层Jar项目的资源,不会触发内层War包构建阶段的变量替换。另外你贴出的pom配置本身存在语法错误,未闭合的<resource>标签也会导致配置不生效。
解决方案
按以下步骤调整即可:
- 修正基础资源过滤配置
如果你是单模块项目,直接修正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里。
- 配置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>
- 验证生效
执行mvn package命令后,先解压生成的War包,检查里面的version.txt是否已经完成变量替换。只要War包里的内容是正确的,后续被打包进外层Jar后内容不会发生变化。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

