2015-01-09 89 views
1

我正在編寫自定義插件,它應該創建多個源代碼集取決於插件擴展。 如何在應用方法中做到這一點?如何在自定義插件中創建源代碼集

這裏是我的代碼片段(包括不工作),標籤 - 從列表擴展:

1.

project.sourceSets { 
     labels.each { info -> 
      "${info.lower}Src" { 
       java.srcDirs = ['src'] + info.srcPostfix.collect { postfix -> "src_custom/${postfix}" } 
      } 
     } 
     main { java.srcDirs = ['src'] + labels.collect { info -> "src_custom/${info.lower}" } } 
     test { java.srcDirs = ['test'] + labels.collect { info -> "test_custom/${info.lower}" } } 
    } 

2.

labels.each { info -> 
     SourceSet modelSrc = project.sourceSets.create("${info.lower}Src") 
     modelSrc.getJava().setSrcDirs(['src'] + info.srcPostfix.collect { postfix -> "src_custom/${postfix}" }) 
    } 
    SourceSetContainer sourceSets = project.convention.getPlugin(JavaPluginConvention).sourceSets 
    SourceSet mainSourceSet = sourceSets.getByName(MAIN_SOURCE_SET_NAME) 
    mainSourceSet.getJava().setSrcDirs(['src'] + labels.collect { info -> "src_custom/${info.lower}" }) 
    SourceSet testSourceSet = sourceSets.getByName(TEST_SOURCE_SET_NAME) 
    testSourceSet.getJava().setSrcDirs(['test'] + labels.collect { info -> "test_custom/${info.lower}" }) 
+0

不工作?這究竟意味着什麼? – Opal

+0

@Opal感謝您的評論。如果我嘗試在應用我的插件的項目上運行「./gradlew build」,則無法找到「$ {label.lower} SrcCompile」任務。並且在最新的IntellijIdea「src_custom/$ {label.lower}」文件夾中沒有標記爲源文件夾。 – Volkman

+0

您正在撰寫的任務不會被創建。添加的源代碼將使用標準任務進行編譯。你能否提供SSCCE?一個很好的例子來說明你想要實現的目標? – Opal

回答

0

我知道這是舊的,但這就是我遇到的情況。我需要創建一個可以創建sourceSet的插件。什麼我以前是這樣的,我build.gradle

sourceSets { 
    myNewSet { 
     groovy.srcDir file("${project.myNewSet_src}") 
     resources.srcDir file("${project.myNewSet_resources}") 
    } 
} 

所以,當我創造了我的插件,在apply方法,我有這樣的:

project.getSourceSets().create("myNewSet", { 
    groovy.srcDir new File("${project.getProjectDir()}/${project.myNewSet_src}") 
    resources.srcDir new File("${project.getProjectDir()}/${project.myNewSet_resources}") 
}); 

希望這可以幫助別人。

相關問題