使用 Gradle Kotlin DSL 和 Intellij 的自定义测试源集

Custom test source set with Gradle Kotlin DSL and Intellij

我的项目使用 Gradle 和 Kotlin DSL 进行构建。我现在想添加一个用于测试的自定义源集。相关代码如下:

java {
    sourceSets.create("systemTest") {
        java.srcDir("src/system-test/java")
        resources.srcDir("src/system-test/resources")
    }
}

通过使用它,我在 Intellij 中获得了另一个模块,该模块被视为源模块。我还尝试了以下将其标记为测试模块:

idea.module {
 testSourceDirs.addAll(project.sourceSets.getByName("systemTest").java.srcDirs)
testSourceDirs.addAll(project.sourceSets.getByName("systemTest").resources.srcDirs)
}

但是,如果我随后执行 ./gradlew clean idea 并使用生成的文件打开项目(通常我从 Gradle 导入我的项目),系统测试文件夹不会被视为源完全没有模块。

有人有使用 Kotlin DSL 声明自定义源集并将其标记为测试模块的经验吗?

编辑: 我现在使用 Groovy 创建了一个示例 Gradle 项目,并且使用以下代码(我猜这只是我上面陈述的 groovy 版本)它可以正常工作:

sourceSets {
  systemTest {
    java {
      compileClasspath += main.output + test.output
      runtimeClasspath += main.output + test.output
      srcDir file('src/system-test/java')
    }
    resources.srcDir file('src/system-test/resources')
  }
}

idea {
    module {
        testSourceDirs += project.sourceSets.systemTest.java.srcDirs
        testSourceDirs += project.sourceSets.systemTest.resources.srcDirs
    }
}

所以要么是我向 Kotlin DSL 的转换有误,要么是 Intellij 方面的错误。

好像我把Kotlin转换弄错了,应该是

idea.module {
    val testSources = testSourceDirs

    testSources.addAll(project.sourceSets.getByName("systemTest").java.srcDirs)
    testSources.addAll(project.sourceSets.getByName("systemTest").resources.srcDirs)

    testSourceDirs = testSources
}

使用此代码段,testSourceDirs 集已更改并将相关源集标记为测试模块。

另一种方法:

testSourceDirs = testSourceDirs.plus(sourceSets["integrationTest"].java.srcDirs)
testResourceDirs = testResourceDirs.plus(sourceSets["integrationTest"].resources.srcDirs)