4

下面是我正在运行以将驱动程序插入到 Wildfly Standalone.xml 的完整 ant 目标:

<target name="xmlrewrite" >
    <!--Driver-->
    <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>
    <xmltask source="standalone.xml" dest="standalone.xml" report="true">
        <copy path="//driver[@module='com.oracle.ojdbc6']/text()" property="modelexists"/>
        <insert
            path="*[local-name()='server']/*[local-name()='profile']/*[local-name()='subsystem'][3]/*[local-name()='datasources']/*[local-name()='drivers']" 
            unless="modelexists">
            <![CDATA[
                <driver name="oracle" module="com.oracle.ojdbc6">
                <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
                </driver>
            ]]>
        </insert>
    </xmltask>
</target>

根据我的理解,只有在standalone.xml 不存在的情况下,才应该在standalone.xml 中创建条目,因为我正在使用unless="modelexists".

但显然它正在为 oracle 驱动程序添加一个新条目xmlns="",这会生成两个 oracle 条目,这会导致我的构建失败。

如果您需要更多信息,请告诉我。

4

2 回答 2

2

要解决 oracle 驱动程序的新条目的问题,您必须为CDATA 部分中xmlns=""的节点提供命名空间(在 xml 的根元素中找到) :driver

<driver xmlns="namespace_for_this_xml" name="oracle" module="com.oracle.ojdbc6">
    <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
</driver>

资源

于 2016-10-28T12:54:00.057 回答
0

我猜该standalone.xml文件与JBoss有关。JBossstandalone.xml中的 XML 元素位于 XML 名称空间中。因此,<copy>嵌套在下面的元素<xmltask>需要是命名空间感知的:

<copy path="//*[local-name()='driver' and @module='com.oracle.ojdbc6']/text()" property="modelexists"/>
于 2016-06-22T17:28:17.450 回答