2013-12-18 3 views
1

내가 gradle로 소스 세트를 동적으로 생성 할 수 있는지 궁금합니다.소스 세트를 동적으로 생성 할 수 있습니까?

  • dbfit - JUnit을
    • 모듈
      • foo는

이 모듈의 각각 다음과 같이 내 현재 프로젝트의 디렉토리 계층 보인다 폴더 (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)의 상위 클래스입니다. –

관련 문제