Gradle:ear deploymentDescriptor - 从application.xml中排除模块

Sto*_*wke 5 ear gradle build.gradle

我的gradle构建文件中有以下内容.我的问题是log4j.properties被添加为application.xml中的ejb模块,尽管我尝试按照此处的线程从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'
}
Run Code Online (Sandbox Code Playgroud)

如何让gradle从application.xml中排除log4j.properties?

编辑

这导致我的应用程序服务器(JBoss 6.0.0)无法启动,因为它不知道如何处理log4j.properties.我可以通过手动创建我的application.xml文件来解决它,但这使得必须维护另一件事.欢迎任何帮助!

cmc*_*nty 1

这段代码对我有用。您需要使用“if”块保护“remove”方法,因为闭包被多次调用。我发现第一次调用时,log4jNode 设置为“null”。

withXml {
    def log4jNode = asNode().module.find { it.ejb.text() == 'log4j.properties' }
    if (log4jNode) {
        asNode().remove( log4jNode )
    }
}
Run Code Online (Sandbox Code Playgroud)