我有一个多项目构建。我编写了一个子项目用于配置测试的插件,我们有3种测试方式,每个子项目都有单元测试但不一定是其他2.这些插件动态添加到sourceSets,这可以被覆盖在子项目build.gradle中。
我看到的问题是,当我生成它们时,这些测试路径没有添加到Idea模块中,可能是因为我的插件在Idea插件识别源集之前未被评估。
顶级build.gradle在所有项目中应用Idea插件,测试插件应用于各个build.gradle文件。
我的问题是:
非常感谢
*编辑*
在插件中我有
private SourceSet configureSourceSet(File classesDir, Project project, testSourceDir) {
def sourceSet = project.sourceSets.create(sourceSetName())
sourceSet.output.classesDir = classesDir
configureClasspathDependencies(project, sourceSet)
def file = new File("$project.projectDir/$testSourceDir")
if (project.plugins.hasPlugin('scala')) {
sourceSet.scala.srcDirs += [file]
} else {
sourceSet.java.srcDirs += [file]
}
return sourceSet
}
在我的模块build.gradle文件的顶部
apply plugin: 'unitTest'
在顶级的gradle fle我有
allprojects {
ext.buildDir = './build'
apply plugin: 'idea'
apply plugin: 'eclipse'
idea.module {
excludeDirs += file('install')
excludeDirs += file('target')
excludeDirs += file('tests_log')
excludeDirs += file('.settings')
downloadSources = false
}
eclipse.classpath {
downloadSources = false
}
}
*编辑2 *
private void configureTestTask(Project project, File classesDir, SourceSet sourceSet) {
def testTask = project.tasks.create(taskName(), Test)
testTask.testClassesDir = classesDir
testTask.classpath = sourceSet.runtimeClasspath
}
答案 0 :(得分:1)
我的假设不正确。我下载了gradle插件源并找到了设置测试源的区域。
private def configureIdeaModuleForJava(Project project) {
project.ideaModule {
sourceDirs = project.sourceSets.main.allSource.sourceTrees.srcDirs.flatten()
testSourceDirs = project.sourceSets.test.allSource.sourceTrees.srcDirs.flatten()
outputDir = project.sourceSets.main.classesDir
testOutputDir = project.sourceSets.test.classesDir
def configurations = project.configurations
scopes = [
COMPILE: [plus: [configurations.compile], minus: []],
RUNTIME: [plus: [configurations.runtime], minus: [configurations.compile]],
TEST: [plus: [configurations.testRuntime], minus: [configurations.runtime]]
]
}
}
testSourceDirs只选择测试的源集,而我的名字就像testUtil。为了解决这个问题,我的configureSourceSets变为:
private SourceSet configureSourceSet(File classesDir, Project project, testSourceDir) {
def sourceSet = project.sourceSets.create(sourceSetName())
sourceSet.output.classesDir = classesDir
configureClasspathDependencies(project, sourceSet)
def file = new File("$project.projectDir/$testSourceDir")
if (project.plugins.hasPlugin('scala')) {
sourceSet.scala.srcDirs += [file]
} else {
sourceSet.java.srcDirs += [file]
}
sourceSet.resources.srcDirs += [file]
sourceSet.resources.exclude("**/*.java")
sourceSet.resources.exclude("**/*.scala")
if (project.plugins.hasPlugin("idea")) {
project.idea.module {
testSourceDirs += sourceSet.allSource.srcDirs.flatten()
}
}
return sourceSet
}