在 IntelliJ 中将 Gradle 源文件夹标记为测试源

我在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


答案 1

您需要确保测试源是此包的唯一源

idea {
    module {
        sourceDirs -= file('src/integrationTest/java')
        testSourceDirs += file('src/integrationTest/java')
    }
}

然后您需要重新创建IntelliJ文件。gradle cleanIdea idea

确保在使用来自 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插件现在正确标记源。


答案 2

来自 JetBrains 问题:

https://youtrack.jetbrains.com/issue/IDEA-151925#comment=27-2355076

apply plugin: 'java'
sourceSets {
  integrationTest
}
apply plugin: 'idea'
idea {
  module {
    testSourceDirs += project.sourceSets.integrationTest.java.srcDirs
    testSourceDirs += project.sourceSets.integrationTest.resources.srcDirs
  }
}

推荐