Maven项目中需正确配置maven-resources-plugin以实现XML资源过滤、避免中文乱码、按profile区分输出路径及跳过特定文件:①在<resources>中设filtering=true并含includes;②显式声明UTF-8编码;③用profiles或子目录区分环境;④通过后置filtering=false的resource排除指定文件。

在Maven项目中,当XML资源文件需随构建过程动态替换占位符(如${project.version})、过滤敏感配置或按环境复制到不同目录时,必须正确配置maven-resources-plugin,否则XML内容中的变量不会被解析,或文件被错误编码导致解析失败。
启用XML资源过滤
第一步:在pom.xml的<build></build>→<resources></resources>区块中声明XML文件路径,并设置filtering为true。
第二步:确保<resource></resource>的<directory></directory>指向src/main/resources等实际存放XML的位置,否则插件找不到文件。
第三步:添加<includes><include>**/*.xml</include></includes>——不加这行,即使目录正确,XML也不会被纳入过滤范围。
避免XML中文乱码
在<properties></properties>中显式声明project.build.sourceEncoding=UTF-8。
在maven-resources-plugin配置中,【必须】设置<encoding>UTF-8</encoding>,否则Windows系统下XML中的中文会被转成乱码,且无法通过IDE恢复。
按profile区分XML输出路径
方法一:使用<profiles></profiles>定义dev/test/prod环境,在各profile内重写<resources></resources>的<directory></directory>和<targetpath></targetpath>。
方法二:在src/main/resources下建xml-dev/、xml-prod/子目录,通过profile激活时用<includes></includes>指定对应目录,例如<include>xml-prod/*.xml</include>。
注意:若同时启用多个profile,且XML文件名重复,后激活的profile会覆盖前一个的输出——【不可逆】覆盖后原文件内容丢失,需手动从版本库还原。
跳过特定XML文件的过滤
在<resources></resources>区块内新增一个<resource></resource>,将<directory></directory>设为同一路径,但设置<filtering>false</filtering>,并用<excludes></excludes>排除需跳过的文件,例如<exclude>config-template.xml</exclude>。
这一步必须放在启用过滤的<resource></resource>之后,否则排除规则不生效。

















