我有一个多项目的建筑。我已经编写了一个插件,子项目用来配置测试,我们有3种测试风格,每个子项目都有单元测试,但不一定是其他的两个。这些插件动态地添加到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'
在最高级的地方,我有
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
}
发布于 2013-10-09 11:07:54
我的假设是错误的。我下载了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
}
https://stackoverflow.com/questions/19229095
复制相似问题