Java 在IntelliJ中将Gradle源文件夹标记为测试源
我在gradle中设置了一个集成测试源文件夹,如下所示:Java 在IntelliJ中将Gradle源文件夹标记为测试源,java,intellij-idea,gradle,integration-testing,Java,Intellij Idea,Gradle,Integration Testing,我在gradle中设置了一个集成测试源文件夹,如下所示: subprojects { apply plugin: 'java' apply plugin: 'idea' sourceCompatibility = 1.8 configurations { integrationTestCompile.extendsFrom testCompile integrationTestCompileOnly.extendsFrom in
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无法将源文件夹识别为测试源
我试着这样添加它们(在子项目中
):
但这毫无帮助。我还尝试手动将它们标记为测试源(上下文菜单->将目录标记为->测试源根),但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 cleaneidea
重新创建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插件现在正确标记源代码。来自JetBrains发行版:
在进行更改后,您是如何重新生成IDEA文件的?这应该行得通(我已经在本地进行了测试)-试着运行
$./gradlew cleanIdea
我希望有一个解决方案,Gradle不生成我的idea配置,因为在同一个repo中也有非Gradle项目。@tddmonkey您的解决方案确实生成了正确的.iml
文件,但IntelliJ没有使用它们。你知道我是怎么做到的吗?Java项目是另一个项目的子文件夹,该项目是主项目,其中包含一个用于配置的.idea
文件夹。您如何打开它?我通常做$./gradlew cleaneidea想法;open.ipr
不,这不会改变任何东西。@Jorn尝试按照我在编辑中的建议进行更改,但不确定您的文件()
,但我倾向于指定源文件的整个路径。你是在Gradle中使用Idea插件还是在IntelliJ IDE中使用Gradle集成?@bharal,这在当时对其他人和我都有效,因此请详细说明,同时使用带有IntelliJ Gradle插件的Gradle插件会在少数情况下造成混淆。说它不起作用
似乎不像是程序员的方法。@LazerBanana告诉我你想说什么-这不起作用,intellij将文件夹标记为src,而不是test src。我正在使用gradle idea插件-应用插件:“idea”
,intellij有gradle插件。@bharal因此这意味着您的intellij插件可能会覆盖由idea gradle插件更改的自定义iml。如果你同时使用这两种方法,这就是它不起作用的原因。但是我同意你的-1;)我将补充这一解释,让其他人看到。谢谢这不管用。很遗憾,idea中没有人能真正提供帮助,是吗?确实如此,但正如我所说,IntelliJ gradle集成最有可能接管。如果您有annotationProcessor
依赖项,它就不起作用。
sourceSets {
integrationTest {
java {
compileClasspath += main.output + test.output
runtimeClasspath += main.output + test.output
srcDir "$projectDir/src/integrationTest/java"
}
resources.srcDir "$projectDir/src/integrationTest/resources"
}
}
apply plugin: 'java'
sourceSets {
integrationTest
}
apply plugin: 'idea'
idea {
module {
testSourceDirs += project.sourceSets.integrationTest.java.srcDirs
testSourceDirs += project.sourceSets.integrationTest.resources.srcDirs
}
}