Исключение транзитивных зависимостей Gradle

Задача
Исключить нежелательную транзитивную зависимость при сборке проекта средствами Gradle

Решение
В конфигурационном файле build.gradle в блоке dependencies описываются библиотеки зависимостей.

Например, ниже представлен пример подключения библиотек фасада логгера slf4j версии 1.6.1 и шаблонизатора Tiles версии 2.2.2:
dependencies {
     compile "org.slf4j:slf4j-log4j12:1.6.1"

    compile "org.apache.tiles:tiles-core:2.2.2"
    compile "org.apache.tiles:tiles-jsp:2.2.2"    
}

Проблема в том, что Tiles, тянет транзитивно так же зависимость от библиотеки slf4j и библиотеки Jakarta Commons Logging (JCL), что вызывает конфлик классов

Для того, чтобы исключить транзитивную зависимость можно добавить фильтр exclude при объявлении библиотек зависимостей:
dependencies {
     compile "org.slf4j:slf4j-log4j12:1.6.1"

    compile ("org.apache.tiles:tiles-core:2.2.2"){
        exclude group: "org.slf4j"
    }
    compile ("org.apache.tiles:tiles-jsp:2.2.2"){
        exclude group: "org.slf4j"
    }
}

Помимо исключения по группе библиотек group, возможно исключение и по конкретному модулю module:
dependencies {
     compile "org.slf4j:slf4j-log4j12:1.6.1"

    compile ("org.apache.tiles:tiles-core:${tilesVersion}"){
        exclude module: "jcl-over-slf4j"
    }
    compile ("org.apache.tiles:tiles-jsp:${tilesVersion}"){
        exclude module: "jcl-over-slf4j"
    }
}


 
comments powered by Disqus