我一直在爲此掙扎一天半左右。我試圖複製在搖籃以下螞蟻概念:什麼是Gradle中Ant taskdef的等價物?
<target name="test">
...
<runexe name="<filename> params="<params>" />
...
</target>
其中runexe
被其他地方
<macrodef name="runexe" >
...
</macrodef>
聲明,也可能是一個taskdef
或scriptdef
即我希望能夠調用一個可重用的預定義代碼塊,並從Gradle任務中傳遞必要的參數。我嘗試了很多東西。我可以創建一個運行exe的任務,沒有任何問題:
task runexe(type: Exec){
commandLine 'cmd', '/c', 'dir', '/B'
}
task test(dependsOn: 'runexe') {
runexe {
commandLine 'cmd', '/c', 'dir', '/N', 'e:\\utilities\\'
}
}
test << {
println "Testing..."
// I want to call runexe here.
...
}
並使用dependsOn讓它運行。但是,這不允許我在需要時正好運行runexe
。我已經用executable
,args
和commandLine
進行了廣泛的實驗。我玩過exec
,並嘗試了在這裏和周圍發現的幾個不同的變化。我也一直在使用Gradle網站提供的免費書籍。
我需要做的是讀取目錄中的文件列表,並將每個文件傳遞給具有其他參數的應用程序。在執行時間之前,直到腳本讀取文件列表纔會知道,列表可能會有所不同,並且需要重複進行調用。
我最好的選擇,目前看來是我發現了什麼here,這可能是好的,但它只是似乎應該有一個更好的辦法。我明白任務只能被調用一次,並且不能從另一個任務中調用任務或傳遞一個參數,但我非常想知道Gradle中正確的方法。我希望其中一位Gradle設計師可能對我有所啓發,因爲這是一個經常在整個網絡上提出的問題,我還沒有找到一個明確的答案或我可以開展工作的解決方案。
Gradle在設計上非常靈活。在最後一段中提到的鏈接中使用的技術對我來說看起來很好。即並非一切都必須是一項任務;定義一個方法很好。 –
謝謝。我現在使用函數來做我想做的事情,但我仍然有興趣知道是否有更多的Gradle-ish方式。 – ConfusedAgain