Gradle Kotlin Dsl Сборка для Kotlin Gradle Plugin, который зависит от класса Groovy в том же проекте - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть плагин Gradle, реализованный с помощью Kotlin, который построен с помощью скрипта сборки kotlin DSL. Это отлично работает. Сценарий сборки выглядит следующим образом и находится в каталоге buildSr c проекта:

plugins {
    groovy
    `kotlin-dsl`
}

repositories {
    mavenLocal()
    mavenCentral()
    jcenter()

}


dependencies {
    testImplementation(gradleTestKit())
    implementation(kotlin("gradle-plugin"))
    implementation ("com.bmuschko:gradle-docker-plugin:6.1.3")
}

Теперь я хочу вызвать существующий класс Groovy в том же дереве исходных кодов buildSr c из Kotlin Код плагина. Это прекрасно работает в Intellij.

Но при сборке с Gradle я получаю: неразрешенный эталонный класс для Groovy Class. Глядя на сборку, я вижу, что задача компиляции Kotlin выполняется первой. Когда я раскомментирую ошибочную ссылку, я вижу, что groovyCompile создает правильные двоичные файлы.

Итак, я попробовал это:

tasks.compileKotlin {
    dependsOn(tasks.compileGroovy)
}

Естественно, этого недостаточно, но я попытался получить сборку для компиляции кода Groovy.

I получил следующую ошибку:

Circular dependency between the following tasks:
:buildSrc:compileGroovy
\--- :buildSrc:compileJava
     \--- :buildSrc:compileKotlin
          \--- :buildSrc:compileGroovy (*)

Поэтому я попытался безуспешно удалить зависимость задачи компиляции Java из компиляции Groovy:

tasks.compileGroovy {
    dependsOn.remove(tasks.compileJava)
}

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

Что мне действительно нужно, это что-то, эквивалентное gradle groovy build as:

compileGroovy.dependsOn = compileGroovy.taskDependencies.values - 'compileJava'
compileKotlin.dependsOn compileGroovy
compileKotlin.classpath += files(compileGroovy.destinationDir)
classes.dependsOn compileKotlin

Как бы это выглядело как Gradle Kotlin Dsl? Или есть лучшие способы решить эту проблему Groovy / Kotlin Зависимость кода?

Информация о версии:

------------------------------------------------------------
Gradle 5.2.1
------------------------------------------------------------

Build time:   2019-02-08 19:00:10 UTC
Revision:     f02764e074c32ee8851a4e1877dd1fea8ffb7183

Kotlin DSL:   1.1.3
Kotlin:       1.3.20
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          1.8.0_232 (AdoptOpenJDK 25.232-b09)
OS:           Mac OS X 10.15.3 x86_64

1 Ответ

1 голос
/ 14 февраля 2020

Я думаю, что это эквивалентно, хотя я думаю, что это просто выбивает Java из картинки, поэтому код Groovy / Kotlin / Java buildSr c не будет работать ...:

tasks {
    val compileJava = named("compileJava", JavaCompile::class).get()
    val compileKotlin = named("compileKotlin", KotlinCompile::class).get()
    val compileGroovy = named("compileGroovy", GroovyCompile::class).get()
    val classes by getting

    compileGroovy.dependsOn.remove("compileJava")
    compileKotlin.setDependsOn(mutableListOf(compileGroovy))
    compileKotlin.classpath += files(compileGroovy.destinationDir)
    classes.setDependsOn(mutableListOf(compileKotlin))
}

Это значительно улучшилось в Gradle 6.1

https://docs.gradle.org/6.1/release-notes.html#defining - порядок компиляции между - groovy, - scala -и- java

И я не уверен, что вышесказанное работает для упорядочивания тестов, если они имеют непредвиденное упорядочение языковых зависимостей

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...