使用Kolin DSL进行集成测试的单独Gradle源集

时间:2018-08-16 12:23:04

标签: gradle kotlin gradle-kotlin-dsl

我正在开发在Kotlin中实现的Spring Boot应用程序,并且希望迁移Gradle构建以使用Gradle Kotlin DSL

我不知道的一件事是如何为集成测试设置separate source set和任务。

我的源代码树如下:

src
├── integrationTest
│   ├── kotlin
│   └── resources
├── main
│   ├── kotlin
│   └── resources
└── test
    ├── kotlin
    └── resources

使用Gradle的Groovy DSL这样设置源集和任务:

// build.gradle
sourceSets {
    integrationTest {
        kotlin {
            compileClasspath += sourceSets.main.output + configurations.testRuntimeClasspath
            runtimeClasspath += output + compileClasspath
        }
    }
}

configurations {
    integrationTestCompile.extendsFrom testCompile
    integrationTestRuntime.extendsFrom testRuntime
}

task integrationTest(type: Test, dependsOn: []) {
    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
}

我发现了许多使用Gradle Kotlin DSL以及其他源集的示例-但是对于组合来说却一无是处。

有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:2)

以下是将Groovy脚本转换为Kotlin DSL的方法:

java {
    sourceSets {
        val integrationTest by creating {
            kotlin.apply {
                compileClasspath += sourceSets["main"].output + configurations.testRuntimeClasspath
                runtimeClasspath += output + compileClasspath
            }
        }
    }
}

configurations["integrationTestCompile"].extendsFrom(configurations["testCompile"])
configurations["integrationTestRuntime"].extendsFrom(configurations["testRuntime"])

val integrationTest by tasks.creating(Test::class) {
    val integrationTestSourceSet = java.sourceSets["integrationTest"]
    testClassesDirs = integrationTestSourceSet.output.classesDirs
    classpath = integrationTestSourceSet.runtimeClasspath
}

另请参阅:Gradle的Migrating build logic from Groovy to Kotlin指南