2015-07-02 35 views
1

我使用Ant 1.8.4和xmltask 1.16。我试图修改Maven pom.xml文件来检查是否有/ project/properties元素,如果没有(创建一个)以便我可以添加一个子元素。 xmltask documentation表示我必须使用副本任务来检查,然后使用如果属性上的插入任务。但是,当有一个现有的/项目/属性节点xmltask测试是否存在没有文本或属性的节点

Can only copy/cut text() nodes and attribute values to properties (found com.sun.org.apache.xerces.internal.dom.DeferredElementNSImpl) 

,并将其插入第二个属性点使用此代码

<xmltask source="${pomdir}/pom.xml" dest=""${pomdir}/pom.xml"> 
    <copy path="/:project/:properties" property="hasProperties"/> 
    <insert path="/:project/:packaging" position="after" if="hasProperties" 
    xml="&lt;properties&gt;"/> 
</xmltask> 

生成此警告。在复制任务中将“/ text()”添加到xpath的末尾可以摆​​脱警告,但不会修复输出中的重复属性节点。

回答

1

我找到了解决方案。我必须有条件地选择项目节点,该节点没有属性子节点。

<insert path="/:project[not(:properties)]/:packaging" 
    position="after"> 
    <![CDATA[ 
    <properties> 
     <customProperty>blah</customProperty> 
    </properties> 
    ]]> 
</insert> 
<insert path="/:project/:properties" 
    xml="&lt;customProperty&gt;blah&lt;/customProperty&gt;"/> 

第一次插入覆盖了没有属性的输入文件,第二次插入覆盖了已经具有属性的输入文件。

相关问题