2014-01-13 90 views
0

我有一個Gradle插件,其中包含一些用於配置的約定。有條件地將任務添加到Gradle中的任務樹

myplugin { 
    doSomethingOnBuild = true/false 
} 

在插件的源,我使用的是doSomethingOnBuild有條件地添加任務(postProcessTask)的任務樹。任務有條件的原因是postProcessTask僅對某種類型的構建是必需的。

projects.gradle.projectsEvaluated { 
    if(convention.doSomethingOnBuild == true) { 
    // add postProcessTask to tree using dependsOn 
    } 
} 

我感到奇怪的有關使用doSomethingOnBuild,因爲我需要它包裝在一個project.gradle.projectsEvaluated有在配置階段在公約參數,也gradle這個警告我關於動態屬性的使用(這是已棄用)

有沒有更好的方法來做到這一點?我應該不這樣做嗎?是否由用戶來調用postProcessTask?

+0

確切的警告是什麼? –

+0

按需創建屬性(又名動態屬性)已被棄用,並計劃在Gradle 2.0中刪除。有關動態屬性替換的信息,請閱讀http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html。 棄用的動態屬性:「項目」上的「doSomethingOnBuild」:Test'「,值:」true「。 – loosebazooka

回答

1

有條件添加任務並不常見,但沒有更多的上下文,我不能說我是否會選擇這個或另一個解決方案(爲任務添加一個descriptiongroup,分成多個插件,等等。)。無論如何,插件延遲對構建模型的訪問是正常的,並且通常是強制性的,並且gradle.projectsEvaluated確實是這樣做的一種方式。

關於「按需創建財產」的警告,這意味着某人正在:Test項目上設置名爲doSomethingOnBuild的財產,但未聲明此類財產。這可能會暗示插件存在問題,或者有人試圖在應用插件之前設置屬性。

如果你指的是約定在嚴格意義搖籃對象時,注意它們已經在很大程度上取代擴展對象。您可以在Gradle User Guide中瞭解有關擴展的更多信息。 (但這並不解釋棄用警告。)

+0

謝謝!我在其中一個約定上出現了拼寫錯誤,因此不推薦使用動態屬性問題(它不會顯示其他約定)。該插件確實使用約定對象,但是這些對象是在我的時間之前編寫的,我讀到它們被擴展對象替代,但沒有機會重構。 – loosebazooka