Исходная папка Mark Gradle в качестве источника теста в IntelliJ

У меня есть исходная папка интеграционного теста, настроенная в градиенте так:

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?

Я использую IntelliJ 2016.1.3 и Gradle 2.14.1 на Ubuntu 16.04

Ответ 1

Тогда вам нужно убедиться, что источник тестов является единственным источником для этого пакета.

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

и тогда вам нужно gradle cleanIdea idea для воссоздания файлов IntelliJ.

Убедитесь, что вы не используете интеграцию IDE Gradle при использовании плагина idea из 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
  }
}