Исходная папка 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
}
}