2013-12-22 75 views
0

相對較新的java和gradle - 試圖做事「正確」。在構建我的應用程序之前(我已經添加了gradle「application」插件)我想設置一些環境和系統的東西 - 例如,我想創建log /目錄和log.txt文件。Gradle「設置」任務(預編譯/編譯/ jar)

所以我做這樣的事情:

task setup { 
    println 'Setup task executing ...' 

    File d = new File('log'); 
    d.mkdir(); 
    f = new File(d.getPath() + '/log.txt'); 
    f.createNewFile(); 
} 

其中一期工程 - 但在運行時,我得到了一堆標準輸出的警告>設置的gradle

Setup task executing ... 
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheduled to be removed in Gradle 2.0. Please read http://gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on the replacement for dynamic properties. 
Deprecated dynamic property: "f" on "task ':setup'", value: "log/log.txt". 
:setup UP-TO-DATE 

所以一個問題:什麼是正確的方式來利用Gradle執行設置/安裝任務? (這應該只在應用程序部署時真正執行一次)

+1

這個具體的警告 - 「按需性能過時」 - 是由代碼中的未變量變量「f」造成的。效果如下:「f」被創建爲當前Project對象的「擴展名」變量。你應該聲明一個局部變量或使用project.ext來消除這個警告。 – akhikhl

回答

5

啊,你是混合任務configuration and execution。這:

task foo { 
    // Stuff 
} 

是不一樣的:

task foo << { 
    // Stuff 
} 

在第一個「東西」在配置時運行,導致你所看到的警告(因爲f解釋作爲此階段的項目變量)。第二,它在執行時運行。

(搖籃是偉大的,但這種很微妙的語法差別可能是許多真氣錯誤的來源!)


至於如何做正確安裝,因爲你正在使用的應用程序插件,你應該看看Including other resources in the distribution

(你也應該考慮目錄創建邏輯移動到應用程序本身,最好你希望它是對某人刪除日誌目錄強勁!)

+0

好的 - 謝謝。將做(都會讀取add'l文檔並將邏輯移入應用程序中)。 –

+0

ad「這種非常微妙的語法區分可能是許多令人憤怒的bug的來源」:這就是爲什麼我總是推薦使用'doLast'而不是'<<'。 –