2016-08-02 50 views
0

我想在構建過程中用Gradle替換log4j2.xml中的值。我找到了一種方法:如何使用Gradle替換log4j2.xml?

task reaplaceInLogFile { 
    String apiSuffix = System.properties['apiSuffix'] ?: '' 
    println "In my task" 
    String contents = file('src/main/resources/log4j2.xml').getText('UTF-8') 
    println "File found" 
    contents = contents.replaceAll("svc0022_operations", "svc0022_operations${apiSuffix}") 
    new File('src/main/resources/log4j2.xml').write(contents, 'UTF-8') 
} 

但是,這也改變了源文件的永久性,我不想這樣做。我想更改將僅包含在構建zip中的log4j2.xml。我知道我可以使用這樣的事情:

tasks.withType(com.mulesoft.build.MuleZip) { task -> 
    String apiSuffix = System.properties['apiSuffix'] ?: '' 
    task.eachFile { 
     println name 
     if (name == 'mule-app.properties') { 
      println "Expanding properties for API Version suffix: ${apiSuffix}" 
      filter { String line -> 
       line.startsWith("${serviceId}.api.suffix") ? "${serviceId}.api.suffix=${apiSuffix}" : line 
      } 
     } 

但我不知道什麼是log4j2文件的類型。如果還有另一種方法可以做到這一點,我會很感激!

我們使用的是Mule gradle插件。

回答

1

該類型不是log4j2文件的類型,而是創建ZIP的任務的類型或您的log4j2文件打包到的任何位置。如果log4j2文件包含在由MuleZip任務生成的ZIP中,那麼您可以簡單地爲log4j2文件添加另一個if -branch。

但實際上,編輯將log4j2文件打包到某個歸檔文件而不是相同類型的所有任務的具體任務可能會更好。

除此之外,你應該能夠使用filesMatching而不是eachFileif我認爲。

+0

謝謝你的回答。不幸的是,log4j2.xml不在MuleZip任務的集合中。這是任務代碼https://github.com/mulesoft-labs/mule-gradle-plugin/blob/master/src/main/groovy/com/mulesoft/build/MuleZip.groovy –

+0

正如我所說的。修改包裝'log4j2.xml'文件的任務。我需要看到你的'build.gradle'和'log4j2.xml'文件的路徑來建議一個具體的任務來修改。 – Vampire

+0

我們的log4j2.xml標準地位於「src \ main \ resources \ log4j2.xml」下面這是我們的build.gradle:https://www.dropbox.com/s/iuv4j9htpseyed4/build.gradle?dl=0 –