2012-09-05 42 views
2

所以,我有這似乎是現在所需如何在gradle中使用基本的groovy腳本?

task deleteJars(type: Delete) { 
    ext.collection = files { genLibDir.listFiles() } 
    delete ext.collection 
} 

task copyJars(type: Copy) { 
    from(configurations.compile) {} 
    from(fixedLibDir) {} 
    into genLibDir 
} 

copyJars.dependsOn('deleteJars') 

我有幾個問題

  1. 是否有書面成一個功能gradle這個方式更清潔的方式來工作,則下列?
  2. 以前,我有以下但似乎複製功能將始終執行,而不是copyJars任務運行時?
  3. 如何在任務中編寫簡單的groovy(例如刪除文件,複製文件等),以便在任務依賴時運行正確?

我可怕的嘗試在該任務時依賴於具有常規運行(可惜跑了,不管我選擇了什麼樣的目標,跑到每一個運行)...

task('copyJars') { 
    ext.collection = files { genLibDir.listFiles() } 
    delete ext.collection 
    copy { from configurations.compile into genLibDir } 
    copy { from fixedLibDir into genLibDir } 
} 

所以我的主要問題是你如何在任務中編寫groovy腳本,以便它只在該任務運行時運行? (因爲我以爲上面的是Groovy腳本,但它似乎運行每一次)

感謝, 院長

回答

2

一個搖籃建立收益分爲三個階段:初始化,配置和執行。構建腳本中的大多數代碼都會在配置階段進行評估,這與最終將運行哪些任務無關。 (只有在配置階段結束時才決定運行哪些任務,一旦所有任務及其依賴關係都已知)。要添加在任務執行時(即在執行階段)運行的代碼,您使用doFirstdoLast向任務添加所謂的任務操作。例如:

task copyJars { 
    doLast { /* put any Groovy code here */ } 
} 

您可以在Gradle User Guide中瞭解有關這些概念的更多信息。

0

好,所以使用,這沒有工作(不得不雖然拿出的任務類型,或將無法運行)

task copyJars() { 
    doLast { 
     ext.collection = files { genLibDir.listFiles() } 
     delete ext.collection 
     copy { from configurations.compile into genLibDir } 
     copy { from fixedLibDir into genLibDir } 
    } 
}