我在 gradle 中设置了一个集成测试源文件夹,如下所示:
subprojects {
apply plugin: 'java'
apply plugin: 'idea'
sourceCompatibility = 1.8
configurations {
integrationTestCompile.extendsFrom testCompile
integrationTestCompileOnly.extendsFrom integrationTestCompile
integrationTestCompileOnly.extendsFrom testCompileOnly
integrationTestRuntime.extendsFrom testRuntime
}
sourceSets {
integrationTest {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir file('src/integrationTest/java')
}
resources.srcDir file('src/integrationTest/resources')
}
}
task integrationTest(type:Test) {
testClassesDir = sourceSets.integrationTest.output.classesDir
classpath = sourceSets.integrationTest.runtimeClasspath
outputs.upToDateWhen { false }
}
}
对于执行测试,这非常有效,但它会导致 IntelliJ 的检查出现问题,这可能会改变测试代码的行为。 IntelliJ 无法将源文件夹识别为测试源。
我尝试这样添加它们(在 subprojects
中):
idea {
module {
testSourceDirs += file('src/integrationTest/java')
}
}
但这根本没有帮助。我还尝试手动将它们标记为测试源(上下文菜单 -> 将目录标记为 -> 测试源根目录),但 IntelliJ 很快将其覆盖回正常源根目录。
如何在 Gradle 中正确配置它?
我在 Ubuntu 16.04 上使用 IntelliJ 2016.1.3 和 Gradle 2.14.1
最佳答案
然后您需要确保测试源是该包的唯一源
idea {
module {
sourceDirs -= file('src/integrationTest/java')
testSourceDirs += file('src/integrationTest/java')
}
}
然后您需要gradle cleanIdea idea
来重新创建 IntelliJ 文件。
确保在使用 gradle 的 idea 插件时没有使用 IDE gradle 集成,如果集成打开,对 iml 文件的自定义更改很可能会与 IDE 发生冲突
sourceSets {
integrationTest {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir "$projectDir/src/integrationTest/java"
}
resources.srcDir "$projectDir/src/integrationTest/resources"
}
}
编辑:Gradle 4.7 Idea 插件现在可以正确标记源。
关于java - 将 Gradle 源文件夹标记为 IntelliJ 中的测试源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42064377/