Можно ли помешать Gradle добавить исключенную транзитивную зависимость? - PullRequest
2 голосов
/ 31 октября 2019

У меня есть библиотека Java, построенная с использованием Gradle 5.6 с некоторыми подавленными транзитивными зависимостями

api('org.springframework.boot:spring-boot-starter-web') {
    exclude module: 'spring-boot-starter-logging'
    exclude module: 'spring-boot-starter-tomcat'
}

Когда я публикую ее в репозитории Maven, я получаю соответствующий раздел POM.xml

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <scope>compile</scope>
        <exclusions>
            <exclusion>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <groupId>*</groupId>
            </exclusion>
            <exclusion>
                <artifactId>spring-boot-starter-logging</artifactId>
                <groupId>*</groupId>
            </exclusion>
        </exclusions>
    </dependency>
...
</dependencies>

Но когда я добавляю свою библиотеку в качестве зависимости, также используя Gradle 5.6

dependencies {
    implementation 'my.group:my.lib:1.0.0'
}

, я вижу исключенную зависимость (например, spring-boot-starter-tomcat), появляющуюся в моей конфигурации compileClasspath. Есть ли способ исключить это раз и навсегда, или я должен вместо этого делать это во всех проектах, которые используют мою библиотеку вручную?

1 Ответ

3 голосов
/ 01 ноября 2019

Как указано в документации (выделено мое):

Исключение конкретной переходной зависимости не гарантирует, что она не будет отображаться в зависимостях данной конфигурации . Например, некоторая другая зависимость, которая не имеет каких-либо исключающих правил, может использовать точно такую ​​же транзитивную зависимость. Чтобы гарантировать, что транзитивная зависимость исключена из всей конфигурации, используйте правила исключения для каждой конфигурации: Configuration.getExcludeRules () . Фактически, в большинстве случаев реальное намерение настройки исключений для каждой зависимости действительно исключает зависимость из всей конфигурации (или пути к классам).

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

// Kotlin DSL
configurations.all {
    exclude(mapOf("module" to "spring-boot-starter-logging"))
    exclude(mapOf("module" to "spring-boot-starter-tomcat"))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...