使用Ant有条件地添加文件内容

时间:2017-03-12 17:21:33

标签: xml ant

如果使用Ant不可用,我需要添加/替换文件内容。如果指定的文件内容已存在,则Ant不应再次添加/替换内容。

原始application.xml

<application>
    <display-name>customear</display-name>    
    <module>
       <ejb>custom.ear</ejb>
    </module>
 </application> 

修改后的application.xml

<application>
   <display-name>customear</display-name>    
   <module>
      <ejb>custom.ear</ejb>
   </module>

<!-- this below content i need to find if exixts or not, if not add the content or do nothing. -->    

    <module>
       <ejb>abcd.ear</ejb>
    </module>

 </application>

我没有选择使用第三方Ant XMLTask或Ant-Contrib任务,因为那些需要额外的JAR文件才能支持。

到目前为止,我已尝试过以下目标。多次运行Ant脚本会导致目标多次添加文件内容。

  <target name="update-custom-ear" >
      <replace file="${basedir}/application.xml">
          <replacetoken><![CDATA[</application>]]></replacetoken>
          <replacevalue>
            <![CDATA[ <module>
                <web>
                    <web-uri>abcd.war</web-uri>
                    <context-root>/*</context-root>
                </web>
            </module> ]]>
        </replacevalue>         
    </replace>
  </target>

请帮帮我。

1 个答案:

答案 0 :(得分:0)

在下面的示例中,depends目标已添加update-custom-ear属性。 depends属性更改update-custom-ear以依赖名为does-abcd.ear-exist-in-application.xml的新目标。

如果does-abcd.ear-exist-in-application.xml已包含字符串abcd.ear-exists-in-application.xml,则新application.xml目标会设置名为abcd.ear的属性。

update-custom-ear目标然后使用unless来确定它是否应该运行。

<target name="does-abcd.ear-exist-in-application.xml">
    <condition property="abcd.ear-exists-in-application.xml">
        <resourcecontains resource="application.xml" substring="abcd.ear"/>
    </condition>
</target>
<target
    name="update-custom-ear"
    depends="does-abcd.ear-exist-in-application.xml"
    unless="abcd.ear-exists-in-application.xml"
>
    <echo>abcd.ear is missing in application.xml. Call replace here.</echo>
</target>

如果application.xml缺少abcd.ear

,则输出
does-abcd.ear-exist-in-application.xml:

update-custom-ear:
    [echo] abcd.ear is missing in application.xml. Call replace here.