Spring Boot升级后Gradle构建出现angular-1.8.3.jar重复问题排查求助
解决Spring Boot升级后Gradle构建重复Jar包问题
问题描述
我有一个Spring Boot 2.2.x项目,执行
gradlew build命令时出现如下错误:* What went wrong: Execution failed for task ':myproject:bootWar'. > Entry WEB-INF/lib/angular-1.8.3.jar is a duplicate but no duplicate handling strategy has been set. Please refer to https://docs.gradle.org/7.6/dsl/org.gradle.api.tasks.Copy.html#org.gradle.api.tasks.Copy:duplicatesStrategy for details.该错误是从Spring 1.5版本大版本升级后出现的,无法追踪具体是哪项变更导致。我想找到重复的angular-1.8.3.jar来源,解决根源问题——不想只为
bootWar任务设置处理策略,因为其他生成类任务(Jar、Tar、Zip等)都会报相同错误,之前找到的方案都是排除重复项,但没找到通用的解决办法。
一、定位重复Jar包的来源
- 执行Gradle依赖树分析命令,查看完整运行时依赖:
搜索输出结果中的./gradlew dependencies --configuration runtimeClasspathangular-1.8.3.jar,即可找到它被哪些依赖模块引入。 - 用过滤命令缩小范围,只查看该Jar相关的依赖上下文:
./gradlew dependencies --configuration runtimeClasspath | grep -A 5 -B 5 "angular-1.8.3" - 用
dependencyInsight直接查询特定依赖的引入路径:
这个命令会直接列出所有引入该Jar的依赖路径,清晰展示重复来源。./gradlew dependencyInsight --dependency angular-1.8.3 --configuration runtimeClasspath
二、解决重复Jar包的根源问题
找到重复来源后,可通过以下方式处理:
- 排除多余的依赖引入:如果某个父依赖不需要引入angular-1.8.3.jar,在对应的依赖声明中排除它。比如发现
xxx-library引入了重复Jar,修改build.gradle:implementation('com.example:xxx-library:1.0.0') { exclude group: 'org.webjars', module: 'angular' // 根据实际group和module调整 } - 调整依赖范围或统一版本:如果是不同依赖引入了同版本Jar,可调整其中一个的依赖范围(比如改为
provided,避免打包进产物),或者在build.gradle中强制统一该Jar的版本。 - 全局设置重复处理策略(临时方案):如果暂时找不到根源,可全局配置所有Copy类任务的重复处理策略,避免所有任务报错,但这只是掩盖问题,不推荐长期使用:
tasks.withType(Copy) { duplicatesStrategy = DuplicatesStrategy.EXCLUDE }
内容的提问来源于stack exchange,提问作者ch1ll
相关产品推荐
相关产品推荐

