具有多个jar文件名的ant replacetoken



我有一个ant任务,它创建了一个webstart jnlp文件。

它替换了模板文件中的@title@等标记:

<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="@codebase@">
<information>
    <title>@title@</title>
</information>
<resources>
    @jars@
</resources>
<application-desc main-class="@mainclass@"/>
</jnlp>

问题是我的lib/dir中有很多jar:Log4J.jar、xpp.jar、resources.jar。。。和1罐代币。

如何将@jars@令牌替换为jars文件名?使得输出变为:

<resources>
  <jar href="log4J.jar"/>
  <jar href="xpp.jar"/>
  <jar href="resources.jar"/>
</resources>

这是我的蚂蚁项目的一部分:

<target name="webstart" description="Deploy as jnlp webstart">
    <copy file="template.jnlp" tofile="test.jnlp">
        <filterchain>
            <replacetokens>
                <token key="codebase" value="myCodebase" />
                <token key="title" value="myTitle" />
                <token key="jars" value="jar href="xxx.jar" />
            </replacetokens>
        </filterchain>
    </copy>
</target>
<project/>

我用ant contrib实现了这一点(感谢Chad Nouis在属性中使用CDATA的提示):

<!-- Tricky part is XML content here CDATA Elements are needed, this is the first part-->
<property name="pre"><![CDATA[
  <jar href="]]></property>
<!-- Tricky part is XML content here  CDATA Elements are needed, this is the last part-->
<property name="after"><![CDATA["/>]]></property>
<!-- this will be our temp file-->
<delete file="temp.txt" failonerror="false"/>
<!-- for task from ant-contrib-->
<for param="file">
  <fileset dir="dist" includes="*.jar"/>
  <sequential>
    <!-- write it into a file, using var/properties did not work-->
    <echo file="temp.txt" append="true">${pre}@{file}${after}</echo>
  </sequential>
</for>
<!-- load file content in property-->
 <loadfile property="xml.data" srcfile="temp.txt"/>
<!-- finish-->
  <copy file="template.jnlp" tofile="test.jnlp" overwrite="true">
      <filterchain>
          <replacetokens>
              <token key="codebase" value="myCodebase" />
              <token key="title" value="myTitle" />
              <token key="jars" value="${xml.data}" />
          </replacetokens>
      </filterchain>
  </copy>

链接:

  • Ant contrib
  • 用于任务

据我所知,您正试图用文本XML替换@jars@令牌。看看这是否是你想要的:

<target name="run">
    <property name="xml.data"><![CDATA[
        <jar href="log4J.jar"/>
        <jar href="xpp.jar"/>
        <jar href="resources.jar"/>
    ]]></property>
    <copy file="template.jnlp" tofile="test.jnlp">
        <filterchain>
            <replacetokens>
                <token key="codebase" value="myCodebase" />
                <token key="title" value="myTitle" />
                <token key="jars" value="${xml.data}" />
            </replacetokens>
        </filterchain>
    </copy>
</target>
由于jnlp文件是一个xml文档,您可以使用xmltask
有关您的需求,请参阅:xml任务手册替换
一点Xpath知识不会有什么坏处,请参阅:
http://zvon.org/xxl/XPathTutorial/
http://www.w3schools.com/xpath/

相关内容

  • 没有找到相关文章

最新更新