禁用所有期望编译项目的传递依赖项(...)

时间:2015-08-03 16:52:25

标签: gradle dependencies transitive-dependency transitivity

是否可以将hibernate配置为仅从我依赖的项目中获取传递依赖(编译(" foobar"))并禁用其他所有内容的传递性?那是我到目前为止所做的:

configurations.all {
    transitive = false
}
dependencies {
    compile (project(':foobar')) {
        transitive = true
    }
}

它不起作用。根本没有拉动传递依赖性。

按建议更新1

configurations.all {
    dependencies.matching { it.name != 'foobar' }.all {
        transitive = false
    }
}

不考虑foobar的依赖关系:

compile - Compile classpath for source set 'main'.
+--- project :foobar
+--- junit:junit:3.8.1
+--- org.hibernate:hibernate-c3p0:3.5.6-Final
+--- org.hibernate:hibernate-commons-annotations:3.2.0.Final
+--- org.hibernate:hibernate-ehcache:3.5.6-Final
+--- org.hibernate:hibernate-entitymanager:3.5.6-Final
+--- org.hibernate:hibernate-envers:3.5.6-Final
+--- org.hibernate:hibernate-jmx:3.5.6-Final
+--- postgresql:postgresql:9.1-901.jdbc4
+--- aspectj:aspectjrt:1.5.2
+--- org.apache.tomcat:tomcat-jdbc:7.0.30
\--- org.easymock:easymock:3.2

更新2

以下解决方案现在适用于我:

dependencies {
    compile project(':foobar')

    compile('org.springframework:spring:2.5.6') { transitive = false }
    compile('org.springframework:spring-mock:2.0.3') { transitive = false }
}

2 个答案:

答案 0 :(得分:2)

您必须对其进行过滤以排除特定的依赖关系。

configurations.all {
    dependencies.matching { it.name != 'foobar' }.all {
        transitive = false
    }
}

答案 1 :(得分:2)

Gradle目前不支持全局配置所需的行为。但是可以通过为每个依赖项明确指定它,因此

dependencies {
   compile project(':foobar')

   compile('org.springframework:spring:2.5.6') { transitive = false }
   compile('org.springframework:spring-mock:2.0.3') { transitive = false }
}

诀窍。不是很好,但工作。