2013-10-30 38 views
4

我在我的gradle構建文件中有以下內容。我的問題是log4j.properties被添加成application.xml中的EJB模塊,儘管我試圖從每線程這裏的XML將其刪除:Gradle:ear deploymentDescriptor - 從application.xml中排除模塊

http://forums.gradle.org/gradle/topics/ear_plugin_inserts_unneeded_ejb_modules_in_the_application_xml_ear_descriptor

apply plugin: 'ear' 

ear { 

    deploymentDescriptor { 
     applicationName = 'ourapp' 
     displayName = 'ourapp' 
     initializeInOrder = true 

      //This doesn't work: 
     withXml { xml -> 
      xml.asNode().module.removeAll { it.ejb.text.equals('log4j.properties') } 
     } 
    } 
    //Add log4j.properties to ear root 
    from('../../lib/log4j.properties', 'log4jProperties') 
} 


dependencies 
{ 
    deploy 'javax:javax.jnlp:1.2' 
    deploy 'com.oracle:ojdbc6:1.6.0' 

    earlib 'org.apache:apache-log4j:1.2.16' 
} 

我如何獲得gradle從application.xml中排除log4j.properties?

編輯

這是導致故障,開始在我的應用服務器(JBoss的6.0.0),因爲它不知道該怎麼做log4j.properties。我可以通過手動創建我的application.xml文件來解決這個問題,但是這會導致需要維護的另一件事。任何援助將受到歡迎!

+0

您是否試過'it.ejb.text()。equals'注意文本之後的括號。 –

+0

@LeonardBrünings沒有任何效果 – StormeHawke

+0

嘗試'xml.asNode()。module.removeAll {true}'只是爲了測試,如果現在所有的模塊都沒有了,你只需要在匹配邏輯上工作。你可以添加生成的描述符的相關部分嗎? –

回答

1

此代碼適用於我。您需要使用'if'塊來保護'remove'方法,因爲多次調用閉包。我發現它第一次被調用時,log4jNode被設置爲'null'。

withXml { 
    def log4jNode = asNode().module.find { it.ejb.text() == 'log4j.properties' } 
    if (log4jNode) { 
     asNode().remove(log4jNode) 
    } 
} 
+0

謝謝!太糟糕了,你來得太晚了,我不能獎賞你的賞金,但還是非常感謝 – StormeHawke