簡體   English   中英

修改現有的gradle任務

[英]Modify an existing gradle task

在Gradle中apply plugin: 'java'時,它定義了其他任務processResources 我想在processResources期間替換其中一個資源文件中的token /參數。 我在build.gradle定義了以下復制任務:

import org.apache.tools.ant.filters.ReplaceTokens                                                                                                                                                                                         

task initConfig(type: Copy) {                                                                                                                                                                                                             
    from("src/resources/assets/js") {                                                                                                                                                                                                     
        include 'config.js'                                                                                                                                                                                                               
        filter(ReplaceTokens, tokens: [host: "${System.env.HOST ?: 'localhost:58080'}" as String])                                                                                                                                        
    }                                                                                                                                                                                                                                     
    into "$sourceSets.main.output.resourcesDir/assets/js"                                                                                                                                                                                 
}   

如果我運行gradle -q run initConfig它工作正常。 我想要的是這個任務作為processResources任務的一部分運行,我試圖將相同的邏輯如下:

processResources << {
    // same code goes here
}

要么

processResources {
    doLast {
        // same code goes here
    }
}

它們都不起作用。 因此,如果運行gradle -q clean processResources資源被復制,但令牌不會被替換。

我不想在運行構建時強制顯式運行/添加initConfig ,所以理想情況下gradle -q build應該做所有必要的事情。

我相信這是可能的,因為build任務本身定義了在執行期間運行多個任務的方式。 找不到怎么樣。

processResources是(你可以在文檔中查看)一個類型為Copy的普通任務。 因此,您可以使用與配置其他復制任務相同的方式對其進行完全配置。 這足以過濾文件:

import org.apache.tools.ant.filters.ReplaceTokens 

apply plugin: 'java'

processResources {
   filter(ReplaceTokens, tokens: ['token.to.replace': 'zombo.com'])
}

在這里您可以找到一個簡單的演示。

ProcessResources是java-plugin提供的任務,你不需要添加<<來修改它的行為。 只需嘗試:

processResources{
  //same Code goes here
}

另一種解決方法可能是在processResources和initConfig之間添加一個依賴關系,如下所示:

processResources{
  dependsOn initConfig
}

這將在processResources之前執行initConfig。

希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM