Как я могу добавить зависимости к kotlinCompilerClasspath? - PullRequest
0 голосов
/ 23 января 2019

Я использую kotlin-gradle-plugin, настраивая его в build.gradle следующим образом:

buildscript {
    ext {
        springBootVersion = '2.1.2.RELEASE'
        kotlinVersion = '1.3.11'
    }
    repositories {
        mavenLocal()
        mavenCentral()
        maven { url "http://repo.spring.io/plugins-release" }
        maven { url "https://plugins.gradle.org/m2/" }
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}"
        classpath "org.jetbrains.kotlin:kotlin-allopen:${kotlinVersion}"
}
apply plugin: 'kotlin'
apply plugin: 'kotlin-spring'

Когда я запускаю gradle dependencies, я получаю следующий kotlinCompilerClasspath среди прочего:

kotlinCompilerClasspath
\--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.11
     +--- org.jetbrains.kotlin:kotlin-stdlib:1.3.11
     |    +--- org.jetbrains.kotlin:kotlin-stdlib-common:1.3.11
     |    \--- org.jetbrains:annotations:13.0
     +--- org.jetbrains.kotlin:kotlin-script-runtime:1.3.11
     \--- org.jetbrains.kotlin:kotlin-reflect:1.3.11
          \--- org.jetbrains.kotlin:kotlin-stdlib:1.3.11 (*)

Когда я отключил транзитивные зависимости в моем build.gradle следующим образом:

configurations {
    all {
        transitive = false
        resolutionStrategy {
            // fail eagerly on version conflict (includes transitive dependencies)
            // e.g. multiple different versions of the same dependency (group and name are equal)
            failOnVersionConflict()
        }
    }
}

Теперь, когда я запускаю gradle dependencies, я получаю следующий kotlinCompilerClasspath

kotlinCompilerClasspath
\--- org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.11

Как можноЯ добавляю зависимости в вышеупомянутый kotlinCompilerClasspath, все еще используя транзитивную = ложную конфигурацию?

Например, я попытался добавить зависимость org.jetbrains.kotlin:kotlin-stdlib в блок обычных зависимостей и в блок buildscript, но все же вышеупомянутый kotlinCompilerClasspath не делаетизменить.

версия Gradle

gradle --version

------------------------------------------------------------
Gradle 5.1.1
------------------------------------------------------------

Build time:   2019-01-10 23:05:02 UTC
Revision:     3c9abb645fb83932c44e8610642393ad62116807

Kotlin DSL:   1.1.1
Kotlin:       1.3.11
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          1.8.0_191 (Oracle Corporation 25.191-b12)
OS:           Mac OS X 10.14.2 x86_64

ОБНОВЛЕНИЕ

Как рекомендовано горячей клавишей ниже, я отфильтровал kotlin изКонфигурация выглядит следующим образом.

configurations {
    matching { !it.name.toLowerCase().contains('kotlin') }.all {
        transitive = false
        resolutionStrategy {
            // fail eagerly on version conflict (includes transitive dependencies)
            // e.g. multiple different versions of the same dependency (group and name are equal)
            failOnVersionConflict()
        }
    }
}

1 Ответ

0 голосов
/ 23 января 2019

Я бы рекомендовал не отключать транзитивные зависимости для конфигурации kotlinCompilerClasspath. Плагин Kotlin Gradle ожидает, что эта конфигурация также будет тянуть транзитивные зависимости компилятора Kotlin:

configurations {
    matching { it.name != 'kotlinCompilerClasspath' }.all {
        transitive = false
        /* ... */
    }
}

Если вы все еще хотите отключить транзитивные зависимости для всех конфигураций, вместо этого вы можете вручную добавить те зависимости, которые были объявлены как транзитивные для модуля kotlin-compiler-embeddable:

dependencies {
    kotlinCompilerClasspath 'org.jetbrains.kotlin:kotlin-stdlib'
    kotlinCompilerClasspath 'org.jetbrains.kotlin:kotlin-script-runtime'
    kotlinCompilerClasspath 'org.jetbrains.kotlin:kotlin-reflect'
    kotlinCompilerClasspath 'org.jetbrains:annotations:13.0'
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...