我有一个gradle项目,并且主要和测试作为sourceSets。
我确实希望test-main不是测试源集的一部分。现在我遇到的问题是,在构建项目时, test-main 被标记为 Sources Root 而不是测试源Root 。
这会导致编译错误,我必须手动将 test-mains 标记为所有子项目的源测试根。
我创建了一个任务,以强制intellij将它们标记为Sources Test Root但似乎我做错了。
提示:
谢谢,
subprojects {
apply plugin: 'java' // all our projects are Java projects
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
options.warnings = false // There are too many :-(
}
configurations {
testMainsCompile.extendsFrom testCompile
testMainsRuntime.extendsFrom testMainsCompile
}
sourceSets {
main {
java {
srcDirs = ['src']
}
resources {
srcDirs = ['src']
}
}
test {
java {
srcDirs = ['test']
}
resources {
srcDirs = ['test']
}
}
testMains {
java {
srcDirs = ['test-mains']
compileClasspath = test.output + main.output + configurations.testMainsCompile
runtimeClasspath = output + compileClasspath + configurations.testMainsRuntime
}
resources {
srcDirs = ['test-mains']
}
}
}
// dummy task just to convince intellij idea that testMains is a test class folder
task testMainsTest(type: Test) {
testClassesDir = sourceSets.testMains.output.classesDir
classpath += sourceSets.testMains.runtimeClasspath
}
[...]
}
答案 0 :(得分:3)
我必须指定想法插件:
subprojects {
apply plugin: 'idea'
idea {
module {
testSourceDirs += file('test-mains')
}
}
}
答案 1 :(得分:1)
我参加聚会真的很晚,但有 11k 的观看次数,这可能对其他人有用。在这一点上,我们已经到了 Gradle 6 和 IntelliJ 2020。要将并行测试文件夹链接到 Gradle 和 IntelliJ,您需要创建文件夹结构,然后几乎完全如上声明源集。源集告诉 IntelliJ 有关子模块的信息,因此它们在 IntelliJ 中显示为带有蓝色方块的文件夹。
Maxime 回答了有关制作源文件夹测试源的问题,该问题由idea 插件处理(尽管您也可以在 IntelliJ 中从文件夹的上下文菜单中手动执行此操作)。
但是,他这里有几件事没有提到。
我可能会将资源源放在 Java 源文件夹的 NEXT 中,而不是与它相同。通常,Gradle/Maven 应用程序在“java”旁边有“资源”。
关于文件夹名称的警告。 Maxime 具有不同的源集名称和文件夹名称。我试过了,我想要 - 在文件夹名称中。但是当我尝试 IntelliJ 时,它在项目结构中有点偏离轨道,为源集名称显示了一个红色的内容源。可能只是我,也许我有其他问题:)
Maxime 巧妙地扩展了 testCompile 以获取项目 compileClasspath,然后为 runtimeClasspath 使用相同的值。但是如果 runtimeClasspath 在项目级别不同怎么办?我使用的 gradle snippit 是直接从项目中获取的(main 和 test 是项目中默认的子模块):
testIntegration {
java {
compileClasspath += project.configurations.testCompileClasspath + main.output + test.output
runtimeClasspath += project.configurations.testRuntimeClasspath + main.output + test.output
srcDir file('src/testIntegration/java')
}
resources {
srcDir file('src/testIntegration/resources')
}
}