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

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 runtimeClasspath
    
    搜索输出结果中的angular-1.8.3.jar,即可找到它被哪些依赖模块引入。
  • 用过滤命令缩小范围,只查看该Jar相关的依赖上下文:
    ./gradlew dependencies --configuration runtimeClasspath | grep -A 5 -B 5 "angular-1.8.3"
    
  • 用dependencyInsight直接查询特定依赖的引入路径:
    ./gradlew dependencyInsight --dependency angular-1.8.3 --configuration runtimeClasspath
    
    这个命令会直接列出所有引入该Jar的依赖路径,清晰展示重复来源。

二、解决重复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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:31:00