【问题标题】:Is it possible to dynamically create source sets?是否可以动态创建源集?
【发布时间】:2013-12-18 13:39:05
【问题描述】:

我想知道是否可以使用 gradle 动态创建源集。我当前项目的目录层次结构如下:

  • dbfit-junit
    • 模块
      • 酒吧

每个模块文件夹(foo 和 bar)都应该分配有自己的源集。原因是我想动态创建像 dbFitTestFoo 和 dbFitTestBar 这样的任务。我目前的做法是这样的:

ext.dbFitModulesDir = "dbfit-junit/module"
ext.dbFitTestSpecs = ["java", "groovy", "scala", "resources"]  
ext.dbFitModules = []

file(dbFitModulesDir).eachDir{ module ->
    dbFitModules << module.name
}

/** this needs to be done dynamically for each "module" **/
sourceSets {
    integrationTest { sourceSet ->
        dbFitModules.each{ module ->
            dbFitTestSpecs.each { spec ->
                if (!sourceSet.hasProperty(spec)) {
                    return
                }
                sourceSet."$spec".srcDir file("$dbFitModulesDir/$module/$spec")
            }
        }
    }
}

dbFitModules.each{ module ->
    task "dbFitTest${module.capitalize()}"(type: Test) {
        group = "Verification"
        description = "Run dbFit tests for $module"
        doLast {
            testClassesDir = sourceSets.integrationTest.output.classesDir
            classpath = sourceSets.integrationTest.runtimeClasspath
        }
    }
}

任务的创建工作顺利,唯一仍然缺少的是源集的动态创建和分配。

感谢任何提示!

【问题讨论】:

    标签: gradle source-sets


    【解决方案1】:

    是的,您可以动态创建源集。这是一个例子:

    dbFitModules.each { module ->
        sourceSets.create("${module}Test") {
            ...
        }
    }
    

    【讨论】:

    • 哇!似乎一个人可以用 Gradle 做几乎所有事情,我喜欢它。感谢您的回答。
    • 嗨,有没有关于这个 sourceSets.create 方法的参考?我找不到它...谢谢!
    • 你可以在Javadocs找到方法。 NamedDomainObjectContainer 是SourceSetContainer 的父类。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-04
    • 2021-08-18
    • 2011-11-29
    • 1970-01-01
    • 2021-12-25
    • 2011-11-09
    相关资源
    最近更新 更多