Max*_*ime 5 testing intellij-idea gradle
我有一个gradle项目,并具有main和test作为sourceSets。
我确实希望test-main不成为测试源集的一部分。现在我遇到的问题是,在构建项目时,将test-main标记为Sources Root而不是Test Sources Root。
这会导致编译错误,并且我必须手动将测试主体标记为所有子项目的“源测试根”。
我创建了一个任务,以强制将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
}
[...]
}
Run Code Online (Sandbox Code Playgroud)
我必须为idea插件指定:
subprojects {
apply plugin: 'idea'
idea {
module {
testSourceDirs += file('test-mains')
}
}
}
Run Code Online (Sandbox Code Playgroud)
我参加聚会确实迟到了,但有 11,000 次浏览,这可能对其他人有用。此时,我们已经到了 Gradle 6 和 IntelliJ 2020。要将并行测试文件夹链接到 Gradle 和 IntelliJ,您需要创建文件夹结构,然后声明几乎与上面完全相同的源集。源集告诉 IntelliJ 有关子模块的信息,因此它们在 IntelliJ 中显示为带有蓝色方块的文件夹。
Maxime 回答了他关于制作源文件夹测试源的问题,该问题由 idea 插件处理(尽管您也可以从文件夹的上下文菜单在 IntelliJ 中手动执行此操作)。
但是,他有一些这里没有提到的事情。
我可能会将资源源保留在 Java 源文件夹的旁边,而不是与它相同。通常,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')
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7918 次 |
| 最近记录: |