我有一个多项目构建。我写了一个插件,子项目用来配置测试,我们有 3 种测试风格,每个子项目都有单元测试,但不一定有其他 2。这些插件动态添加到 sourceSets,这可以被覆盖在子项目 build.gradle 中。
我看到的问题是这些测试路径在我生成它们时没有添加到 Idea 模块中,大概是因为在 Idea 插件识别源集之前没有评估我的插件。
顶层 build.gradle 将 Idea 插件应用到所有项目中,而测试插件应用在各个 build.gradle 文件中。
我的问题是:
- 我对插件评估顺序的假设是否正确?
- 如何影响此评估顺序,以便在评估 Idea 插件之前正确配置源集?
非常感谢
* 编辑 *
在我有的插件中
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 文件中我有
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
}