Gradle Kotlin Dsl Build for a Kotlin Gradle Plugin,它依赖于同一项目中的 Groovy Class
Gradle Kotlin Dsl Build for a Kotlin Gradle Plugin, which depends on a Groovy Class in the same Project
我有一个用 Kotlin 实现的 Gradle 插件,它是用 gradle kotlin DSL 构建脚本构建的。这很好用。构建脚本如下,位于项目的buildSrc目录下:
plugins {
groovy
`kotlin-dsl`
}
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
dependencies {
testImplementation(gradleTestKit())
implementation(kotlin("gradle-plugin"))
implementation ("com.bmuschko:gradle-docker-plugin:6.1.3")
}
现在我想从 Kotlin 插件代码调用同一个 buildSrc 源代码树中的现有 Groovy Class。这在 Intellij 中工作正常。
但是当使用 gradle 构建时,我得到一个:Groovy Class 的未解析引用 Class。
查看构建,我看到 compileKotlin 任务首先执行。当我取消对失败引用的注释时,我看到 groovyCompile 生成了正确的二进制文件。
所以我尝试了这个:
tasks.compileKotlin {
dependsOn(tasks.compileGroovy)
}
自然这还不够好,但我试图让构建先编译 Groovy 代码。
我收到以下错误:
Circular dependency between the following tasks:
:buildSrc:compileGroovy
\--- :buildSrc:compileJava
\--- :buildSrc:compileKotlin
\--- :buildSrc:compileGroovy (*)
所以我尝试从编译中删除 compileJava 任务依赖性,但没有成功Groovy:
tasks.compileGroovy {
dependsOn.remove(tasks.compileJava)
}
问题如上。基本上我不清楚如何删除 gradle
中的预配置任务依赖项
我真正需要的是 gradle groovy 构建为:
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
我认为这是等价的,虽然我认为它只是把 Java 打乱了,所以 Groovy/Kotlin/Java buildSrc 代码将不起作用...:[=12=]
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
中得到了极大的改进
而且我不确定以上是否适用于测试排序,如果它们具有意外的语言依赖排序
我有一个用 Kotlin 实现的 Gradle 插件,它是用 gradle kotlin DSL 构建脚本构建的。这很好用。构建脚本如下,位于项目的buildSrc目录下:
plugins {
groovy
`kotlin-dsl`
}
repositories {
mavenLocal()
mavenCentral()
jcenter()
}
dependencies {
testImplementation(gradleTestKit())
implementation(kotlin("gradle-plugin"))
implementation ("com.bmuschko:gradle-docker-plugin:6.1.3")
}
现在我想从 Kotlin 插件代码调用同一个 buildSrc 源代码树中的现有 Groovy Class。这在 Intellij 中工作正常。
但是当使用 gradle 构建时,我得到一个:Groovy Class 的未解析引用 Class。 查看构建,我看到 compileKotlin 任务首先执行。当我取消对失败引用的注释时,我看到 groovyCompile 生成了正确的二进制文件。
所以我尝试了这个:
tasks.compileKotlin {
dependsOn(tasks.compileGroovy)
}
自然这还不够好,但我试图让构建先编译 Groovy 代码。
我收到以下错误:
Circular dependency between the following tasks:
:buildSrc:compileGroovy
\--- :buildSrc:compileJava
\--- :buildSrc:compileKotlin
\--- :buildSrc:compileGroovy (*)
所以我尝试从编译中删除 compileJava 任务依赖性,但没有成功Groovy:
tasks.compileGroovy {
dependsOn.remove(tasks.compileJava)
}
问题如上。基本上我不清楚如何删除 gradle
中的预配置任务依赖项我真正需要的是 gradle groovy 构建为:
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
我认为这是等价的,虽然我认为它只是把 Java 打乱了,所以 Groovy/Kotlin/Java buildSrc 代码将不起作用...:[=12=]
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
中得到了极大的改进而且我不确定以上是否适用于测试排序,如果它们具有意外的语言依赖排序