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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:28:44