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

Gradle打包:如何在jar.from中排除文件?解决LICENSE.txt重复异常

解决Gradle打包时重复LICENSE.txt的冲突问题

这个问题我之前也碰到过——直接在jar任务里加全局exclude有时候不会生效,因为你是把整个依赖的zipTree直接导入,这时候需要在处理每个依赖的zipTree时就排除重复文件,而不是在任务层面做全局排除。

你可以修改collect里的逻辑,在创建zipTree的时候就通过exclude去掉LICENSE.txt:

jar {
    from configurations.embed.collect { dep ->
        if (dep.isDirectory()) {
            dep
        } else {
            zipTree(dep).exclude("LICENSE.txt")
        }
    }
}

这样处理的话,每个依赖的zipTree在被加入到最终jar包之前,就已经移除了LICENSE.txt文件,自然不会出现重复条目冲突。

如果上面的方法还是有问题(比如某些依赖的LICENSE.txt在子目录下),你可以用通配符匹配所有路径下的LICENSE.txt:

jar {
    from configurations.embed.collect { dep ->
        dep.isDirectory() ? dep : zipTree(dep).exclude("**/LICENSE.txt")
    }
}

另外,如果你不想完全排除LICENSE文件,而是想保留其中一份,也可以通过配置duplicatesStrategy让Gradle自动处理重复文件,比如保留第一个遇到的版本:

jar {
    duplicatesStrategy = DuplicatesStrategy.INCLUDE // 可选值还有EXCLUDE、RENAME
    from configurations.embed.collect { it.isDirectory() ? it : zipTree(it) }
}

不过通常直接排除重复文件是最直接解决冲突的方式,推荐第一种方案。

内容的提问来源于stack exchange,提问作者user1779715

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:31:48