Ant,(over)写入文件

时间:2009-09-16 12:51:41

标签: file scripting ant

如何编写(或覆盖)以下内容:

            <dependencies>
            <dependency>
                <groupId>ged.eprom</groupId>
                <artifactId>epromx</artifactId>
                <version>${version.to.set}</version>
                <classifier>stubjava</classifier>
            </dependency>
        </dependencies>

到当前目录中名为pom.xml的文件中。

我尝试过蚂蚁脚本:

        <echo file="pom.xml">
        <dependencies>
            <dependency>
                <groupId>ged.eprom</groupId>
                <artifactId>epromx</artifactId>
                <version>${version.to.set}</version>
                <classifier>stubjava</classifier>
            </dependency>
        </dependencies>
    </echo>

但我收到了错误消息:

echo doesn't support the nested "dependencies" element.

3 个答案:

答案 0 :(得分:24)

您必须使用CDATA标记来转义内容,这也意味着它不会解释变量替换,因此我会在三个echo语句中将其分解。

    <echo file="pom.xml"><![CDATA[
            <dependencies>
                    <dependency>
                            <groupId>ged.eprom</groupId>
                            <artifactId>epromx</artifactId>
                            <version>]]></echo>
    <echo file="pom.xml" append="true">${version.to.set}</echo>
    <echo file="pom.xml" append="true"><![CDATA[</version>
                            <classifier>stubjava</classifier>
                    </dependency>
            </dependencies>
   ]]> </echo>

答案 1 :(得分:13)

您拥有echoxml任务:

http://ant.apache.org/manual/Tasks/echoxml.html

<echoxml file="pom.xml">
  <dependencies>
    <dependency>
      <groupId>ged.eprom</groupId>
      <artifactId>epromx</artifactId>
      <version>${version.to.set}</version>
      <classifier>stubjava</classifier>
    </dependency>
  </dependencies>
</echoxml>

答案 2 :(得分:3)

ant解析器正在读取您想要回显的数据,以尝试将无效的子元素添加到<echo/>父元素。如果您希望将该信息发送至pom.xml,则应使用&lt;&gt;实体对元素输出进行编码:

<echo file="pom.xml">
            &lt;dependencies&gt;
                    &lt;dependency&gt;
                            &lt;groupId&gt;ged.eprom&lt;/groupId&gt;
                            &lt;artifactId&gt;epromx&lt;/artifactId&gt;
                            &lt;version&gt;${version.to.set}&lt;/version&gt;
                            &lt;classifier&gt;stubjava&lt;/classifier&gt;
                    &lt;/dependency&gt;
            &lt;/dependencies&gt;
</echo>