Maven资源过滤生成重复version.properties的问题及优化问询
问题原因
你遇到的双文件现象是Maven资源处理逻辑导致的:
- 你同时保留了默认的
src/main/resources资源配置(默认关闭过滤),又单独添加了src/main/resources/versions的过滤配置。 - 第一步:默认配置会把
src/main/resources下所有文件(包括versions/version.properties)原封不动复制到target/classes/versions/,因为过滤关闭,${project.version}变量未被替换。 - 第二步:单独的
versions目录配置会把该目录下的version.properties经过滤替换后,直接输出到target/classes根目录(未指定targetPath时,默认输出到类根路径),最终出现两个位置的文件。
简洁解决方案
调整Maven资源配置,让默认资源处理排除versions目录,同时单独处理versions目录时指定输出到对应子目录,确保只生成一个替换后的文件:
<build> <!-- 资源处理配置 --> <resources> <!-- 处理除versions外的所有资源,关闭过滤 --> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <excludes> <exclude>versions/**</exclude> </excludes> </resource> <!-- 单独处理versions目录,开启变量过滤,输出到classes/versions子目录 --> <resource> <directory>src/main/resources/versions</directory> <filtering>true</filtering> <targetPath>versions</targetPath> </resource> </resources> <!-- 指定从pom.xml读取变量 --> <filters> <filter>pom.xml</filter> </filters> </build>
执行mvn clean javafx:run后,只会在target/classes/versions/下生成替换后的version.properties,其他资源不受影响,也不会出现根目录的重复文件。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

