Отключите транзитивные зависимости для всего, что ожидает проект компиляции (...)

Можно ли настроить hibernate так, чтобы он брал только транзитивные зависимости из проекта, на который я полагаюсь (compile("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 ответа

Решение

В настоящее время Gradle не поддерживает настройку желаемого поведения в глобальном масштабе. Это возможно, хотя явно указав его для каждой зависимости, таким образом

dependencies {
   compile project(':foobar')

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

делает трюк. Не очень хорошо, но работает.

Вам придется отфильтровать его, чтобы исключить конкретную зависимость.

configurations.all {
    dependencies.matching { it.name != 'foobar' }.all {
        transitive = false
    }
}
Другие вопросы по тегам