Ant replacetoken с несколькими именами файлов jar

У меня есть эта задача 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>
</jnlp>

Проблема в том, что у меня много банок в моем lib/dir: Log4J.jar, xpp.jar, resources.jar... и 1 барабанный токен.

Как я могу заменить токен @jars @именами файлов jars? так что выход будет:

<resources>
 <jar href="log4J.jar">
 <jar href="xpp.jar">
 </jar></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"="">
 </token></token></token></replacetokens>
 </filterchain>
 </copy>
</target>
3 ответа

Мне удалось добиться этого с помощью ant-contrib (спасибо Чаду Нуису за подсказку с CDATA в свойствах):

<!-- Tricky part is XML content here CDATA Elements are needed, this is the first part-->


<!-- 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>
</fileset></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}">
 </token></token></token></replacetokens>
 </filterchain>
 </copy>
</loadfile></delete>

Ссылки:


Поскольку файл jnlp является документом xml, вы можете использовать xmltask. Для вашего требования см.: Xml task manual replace небольшое знание Xpath не повредит, см.: http://zvon.org/xxl/XPathTutorial/ http://www.w3schools.com/xpath/


Насколько я понимаю, вы пытаетесь заменить токен @jars @буквенным XML. Посмотрите, как это вы делаете:

<target name="run">
 <property name="xml.data"><!--[CDATA[
 <jar href="log4J.jar"/-->
 <jar href="xpp.jar">
 <jar href="resources.jar">
 ]]></jar></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}">
 </token></token></token></replacetokens>
 </filterchain>
 </copy>
</target>

licensed under cc by-sa 3.0 with attribution.