什么是在Gradle中排除隐藏依赖项的最佳方法?

时间:2015-12-08 15:35:28

标签: gradle dependencies

比如说,您在Gradle项目的依赖项中看到了这一点:

+--- org.springframework.security:spring-security-core: -> 3.2.7.RELEASE
     +--- aopalliance:aopalliance:1.0
     +--- org.springframework:spring-beans:3.2.13.RELEASE -> 4.1.7.RELEASE (*)
     +--- org.springframework:spring-expression:3.2.13.RELEASE -> 4.1.7.RELEASE (*)
     +--- org.springframework:spring-aop:3.2.13.RELEASE -> 4.1.7.RELEASE (*)
     +--- org.springframework:spring-context:3.2.13.RELEASE -> 4.1.7.RELEASE
     |    +--- org.springframework:spring-aop:4.1.7.RELEASE (*)
     |    +--- org.springframework:spring-beans:4.1.7.RELEASE (*)
     |    +--- org.springframework:spring-core:4.1.7.RELEASE (*)
     |    \--- org.springframework:spring-expression:4.1.7.RELEASE (*)
     \--- org.springframework:spring-core:3.2.13.RELEASE -> 4.1.7.RELEASE (*)

如果不先从org.springframework:spring-expression中排除org.springframework:spring-context,是否可以排除org.springframework.security:spring-security-core

2 个答案:

答案 0 :(得分:0)

为了从任何配置中排除依赖关系,请使用:

 configurations {
   all {
     exclude group: 'org.springframework', module: 'spring-expression'
   }
 }

如果要强制执行特定版本的依赖项,可以使用:

 configurations.all {
   resolutionStrategy.eachDependency { DependencyResolveDetails details ->
     if (details.requested.group == 'org.springframework') {
       details.useVersion '3.2.13.RELEASE'
     }
   }
 }

如果使用不同版本多次提取传递依赖关系,这可能会有所帮助。

答案 1 :(得分:0)

我建议将此添加到您的Gradle构建中,或许:

dependencies {
  // Explicitly include spring-expression transitive dependency then manage its dependencies
  compile('org.springframework:spring-context:3.2.13.RELEASE') {
    transitive = false
  }
}

您还可以强制使用Gradle用户指南

的特定传递依赖项See Section 52.4.2. Client module dependencies