我的项目正在使用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导入项目),则根本不会将system-test文件夹视为源模块。
是否有使用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方面的错误。
答案 0 :(得分:0)
好像我弄错了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
集,并将相关的源集标记为测试模块。
答案 1 :(得分:0)
另一种方法:
testSourceDirs = testSourceDirs.plus(sourceSets["integrationTest"].java.srcDirs)
testResourceDirs = testResourceDirs.plus(sourceSets["integrationTest"].resources.srcDirs)