2013-04-04 32 views
1

嗨,我想動態創建和配置基於插件擴展值的任務,問題似乎是評估順序,有沒有什麼辦法可以解決它?配置自定義插件使用擴展參數

apply plugin: SetupPlugin 

setup { 
    destDir = 'some directory set per project in build.gradle' 
    sourceFile = 'some file set per project in build.gradle' 
} 


class PluginExtension { 
    String destDir 
    String sourceFile 
} 

class SetupPlugin implements Plugin<Project> { 
    def placeholders 

    void apply(Project project) { 
     project.extensions.create("setup", PluginExtension) 

     project.task ("setupEnvironment", type: Copy) { 
      doFirst() { 
       //computes placeholders <-- project.setup has value here 
      } 

      into (project.setup.destDir){ //<-- project.setup is null 
       from project.setup.sourceFile 
      } 
      filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: placeholders) 
     } 
    } 
} 

回答

0

這是因爲apply在應用設置設置之前被調用。

它適用於doFirst,因爲它在構建期間在apply之後調用。 也許你可能會把你的副本包裝到doLast

1

將此移入doFirst塊可能會導致一些副作用,因爲在執行時重新配置副本任務的參數而不是配置時間,因此最新任務可能會遇到問題。一個應該做的訣竅quickfix是推遲使用閉包評估:

... 
void apply(Project project) { 
     project.extensions.create("setup", PluginExtension) 

     project.task ("setupEnvironment", type: Copy) { 
      doFirst() { 
       //computes placeholders <-- project.setup has value here 
      } 

      into {project.setup.destDir} 
      from { project.setup.sourceFile } 
      filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: placeholders) 
     } 
} 
... 

希望幫助!

歡呼聲, 勒

0

原來我問,我認爲是非常相似的這一個問題。我可能會錯過一個細微的差異,但如果它有幫助:here it is.

相關問題