2013-12-18 123 views
1

我想知道是否可以使用gradle動態創建源集。我的當前項目的目錄層次結構如下所示:是否可以動態創建源集?

  • dbfit,JUnit的
    • 模塊

每本模塊文件夾(foo和bar)應該h將其自己的源集分配。原因是我想動態創建像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 
     } 
    } 
} 

的任務創建工程進展順利,這仍然是唯一缺少的東西是sourcesets的動態創建和分配。

感謝您的任何提示!

回答

6

是的,您可以動態創建源集。這裏有一個例子:

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

哇!似乎可以用Gradle做幾乎所有事情,我喜歡它。感謝你的回答。 – u6f6o

+1

嗨,有沒有對此_sourceSets.create_方法的任何引用?我找不到它......謝謝! – Mikyjpeg

+1

您可以在[Javadocs](https://docs.gradle.org/current/javadoc/org/gradle/api/NamedDomainObjectContainer.html#create(java.lang.String))中找到該方法。 NamedDomainObjectContainer是[SourceSetContainer]的父類(https://docs.gradle.org/current/javadoc/org/gradle/api/tasks/SourceSetContainer.html)。 –

相關問題