首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >带有动态源目录的Gradle Idea插件

带有动态源目录的Gradle Idea插件
EN

Stack Overflow用户
提问于 2013-10-07 15:47:39
回答 1查看 1.9K关注 0票数 2

我有一个多项目的建筑。我已经编写了一个插件,子项目用来配置测试,我们有3种测试风格,每个子项目都有单元测试,但不一定是其他的两个。这些插件动态地添加到sourceSets中,这可以在子项目build.gradle中被覆盖。

我看到的问题是,当我生成这些测试路径时,它们不会添加到Idea模块中,这大概是因为在Idea插件标识源集之前,没有对我的插件进行评估。

顶级build.gradle将Idea插件应用于所有项目,测试插件则应用于单个build.gradle文件中。

我的问题是:

  1. 我对插件的评估顺序是否正确?
  2. 如何影响评估顺序,以便在评估Idea插件之前正确配置sourceSets?

非常感谢

*编辑*

在我的插件里

代码语言:javascript
运行
复制
    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文件的顶部

代码语言:javascript
运行
复制
apply plugin: 'unitTest'

在最高级的地方,我有

代码语言:javascript
运行
复制
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 *

代码语言:javascript
运行
复制
private void configureTestTask(Project project, File classesDir, SourceSet sourceSet) {
    def testTask = project.tasks.create(taskName(), Test)
    testTask.testClassesDir = classesDir
    testTask.classpath = sourceSet.runtimeClasspath
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-09 11:07:54

我的假设是错误的。我下载了gradle插件源代码,并找到了设置测试源的区域。

代码语言:javascript
运行
复制
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变成了:

代码语言:javascript
运行
复制
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19229095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档