LibGDX游戏执行gradle dist打包.jar时出现重复文件未处理报错
问题原因
Gradle 7及以上版本对打包时的重复文件默认采用FAIL策略,你当前的dist任务会把所有依赖Jar解压后合并打包,多个依赖包中都包含LICENSE.txt文件,没有指定重复处理规则就会触发报错。
解决方案
在dist任务中明确指定重复文件处理策略即可,常用的两种策略可选:
DuplicatesStrategy.EXCLUDE:遇到重复文件时直接跳过后续的重复条目DuplicatesStrategy.FIRST:保留第一个遇到的文件,忽略后续重复条目
修改后的dist任务配置
import org.gradle.api.file.DuplicatesStrategy task dist(type: Jar) { manifest { attributes 'Main-Class': project.mainClassName } // 明确指定重复文件处理策略 duplicatesStrategy = DuplicatesStrategy.EXCLUDE dependsOn configurations.runtimeClasspath from { configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } } // 可选:额外排除不需要的冲突文件,避免其他重复问题 exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA', 'README*', 'LICENSE*' with jar }
补充说明
如果你不需要在最终Jar中保留许可证文件,可以保留上面代码中的exclude配置,直接过滤掉所有LICENSE相关文件,从根源上避免该类重复问题。如果需要保留许可证,仅需设置duplicatesStrategy即可,不需要加exclude配置。
内容的提问来源于stack exchange,提问作者Zaigard
相关产品推荐
相关产品推荐

