муравьиный токен с несколькими именами файлов jar - PullRequest
1 голос
/ 21 марта 2012

У меня есть эта задача муравья, которая создает jnlp-файл webstart.

Он заменяет токены типа @ 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 много файлов: 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/>

Ответы [ 3 ]

0 голосов
/ 21 марта 2012

Мне удалось добиться этого с помощью ant-contrib (спасибо Чаду Нуису за подсказку в свойствах 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>

Ссылки:

0 голосов
/ 22 марта 2012

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

0 голосов
/ 21 марта 2012

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

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...