2013-04-26 79 views
4

我正在嘗試創建我的第一個Gradle插件。
1.添加擴展屬性:project.extensions.create("abc", AbcExtension)
2.定義複製任務。當我定義下列方式任務在Gradle插件中定義任務的正確方法是什麼?

project.task("abcTask", type: Copy) { 
    from project.abc.fromPath 
    into project.abc.intoPath 
} 

project.abc.fromPath等於AbcExtension.fromPath價值 - 它不會從build.gradle讀取值。
當我定義任務以下方式

project.task("abcTask", type: Copy) << { 
    from project.abc.fromPath 
    into project.abc.intoPath 
} 

它總是打印UP-TO-DATE和不運行的任務。

請解釋這種行爲,並告訴我什麼是定義在搖籃插件任務(與typedependsOn functionallity)

+0

這個問題 - http://stackoverflow.com/questions/15632696/gradle-tasks-difference - 也幫了我很多 – 2013-04-29 11:44:51

回答

11

插件有一個可變的構建模型值的每一個讀(即任何可以推遲正確的方法至少在配置階段結束之前設置)。有幾種方法可以實現這個目標。其中有:

  • 使用接受閉包作爲值的搖籃API(如Copy.from
  • 使用回調像project.afterEvaluate {}gradle.projectsEvaluated {}
  • 使用約定的映射機制(注意,這是不被視爲一個公共特徵)

爲手邊的工作選擇最佳選擇需要一些專業知識。 (這可能有助於研究一些在Gradle codebase的插件。)在你的情況,我可能會做到以下幾點:

project.task("abcTask", type: Copy) { 
    from { project.abc.fromPath } 
    into { project.abc.intoPath } 
} 

<<版本不工作,因爲它配置Copy任務爲時已晚。一般來說,所有配置應該在配置階段進行,而不是在執行階段。您可以在Gradle User Guide中瞭解更多關於Gradle構建階段的信息。

相關問題