Maven使用通配符移动资源:copy-rename-maven-plugin生成冗余文件求助
解决copy-rename-maven-plugin覆盖缓存破击文件的问题
我来帮你搞定这个缓存破击文件的覆盖问题!你遇到的核心问题是插件没正确识别带16位十六进制后缀的目标文件,反而把通配符规则当成了普通文件名的一部分,所以生成了冗余的file-*.js文件。下面是调整后的正确配置和关键说明:
正确的插件配置
<plugin> <groupId>com.coderplus.maven.plugins</groupId> <artifactId>copy-rename-maven-plugin</artifactId> <version>1.0.1</version> <!-- 建议使用最新稳定版本 --> <executions> <execution> <id>overwrite-cache-busted-file</id> <phase>prepare-package</phase> <goals> <goal>rename</goal> <!-- 使用rename目标直接替换,而非复制后改名 --> </goals> <configuration> <!-- 替换为你的源file.js实际路径 --> <sourceFile>${project.build.outputDirectory}/file.js</sourceFile> <!-- 用正则精准匹配16位十六进制后缀的目标文件 --> <targetFile>${project.build.outputDirectory}/file-[0-9a-f]{16}.js</targetFile> <overwrite>true</overwrite> <!-- 允许覆盖已存在的目标文件 --> <regex>true</regex> <!-- 开启正则匹配模式,让插件解析目标路径中的正则规则 --> <verbose>true</verbose> <!-- 可选:开启日志输出,方便排查执行细节 --> </configuration> </execution> </executions> </plugin>
关键配置说明
- 开启
regex模式:这是最核心的一步!如果不设为true,插件会把[0-9a-f]{16}当成普通字符串处理,直接生成file-[0-9a-f]{16}.js文件,而不是匹配已存在的缓存破击文件。 - 使用
rename目标:相比copy目标,rename会直接替换目标文件,避免生成多余的副本。 - 精准正则匹配:
[0-9a-f]{16}严格匹配16位十六进制字符,确保只会命中你要覆盖的缓存破击文件。 - 路径适配:根据你的项目结构调整
sourceFile和targetFile的路径,比如如果文件在src/main/webapp目录下,就把路径改成对应位置。
额外注意事项
- 确保目标目录下只有一个符合
file-[0-9a-f]{16}.js格式的文件,否则插件会匹配第一个找到的文件。 - 如果执行时提示找不到目标文件,检查正则规则是否和现有文件名格式完全匹配(比如是否区分大小写?默认正则是不区分的,但如果你的后缀是大写十六进制,可调整为
[0-9A-Fa-f]{16})。
内容的提问来源于stack exchange,提问作者Hmbucker
相关产品推荐
相关产品推荐

