полоска до делимера в муравье - PullRequest
1 голос
/ 08 марта 2011

У меня есть цель, которая запустит исполняемый файл и получит версию. Но мне нужно убрать вещи до делиметра. Помогите мне, пожалуйста.

<target name="tomcatVersion">
  <exec executable="${WT_HOME}/tomcat/bin/catalina.bat" outputproperty="tomcat.version">
    <arg value="version" />
    <redirector>
      <outputfilterchain>
        <tokenfilter>
          <containsstring contains="Server number:"/>
        </tokenfilter>
      </outputfilterchain>
    </redirector>
  </exec>
  <echo message="${tomcat.version}"/>
</target>

Ответы [ 2 ]

1 голос
/ 08 марта 2011

[Обновление: одношаговый метод загрузки ресурсов с помощью Мэтта]

Это можно сделать, прочитав выходные данные исполняемого файла в свойство, а затем отфильтровав свойство через маркер replaceregexpфильтр для извлечения нужной вам строки.Например:

<project default="get-version">

  <target name="get-version">
    <exec executable="bash" outputproperty="version.output">
      <arg value="ant"/>
      <arg value="-version"/>
    </exec>
    <loadresource property="version">
      <string value="${version.output}"/>
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="[^\d]*(\d.\d.\d).*" replace="\1"/>
        </tokenfilter>
        <striplinebreaks/>
      </filterchain>
    </loadresource>
    <echo level="info" message="version is: '${version}'"/>
  </target>
</project>

Пример вывода:

$ ant -version
Apache Ant(TM) version 1.8.2 compiled on December 20 2010

$ ant
Buildfile: build.xml

get-version:
     [echo] version is: '1.8.2'

BUILD SUCCESSFUL
Total time: 2 seconds

(я использую ant -version в качестве удобной подставки для любого исполняемого файла, который вы запускаете. Я знаю, что версия Ant можетполучить из свойств Ant.)

В более старых версиях Ant (<1.7) это можно сделать в два этапа: </p>

  1. Записать выходные данные исполняемого файла в файл
  2. Прочитать файл через фильтр токенов replaceregexp

Например:

<project default="get-version">
  <target name="get-version">
    <exec executable="bash" output="version.out">
      <arg value="ant"/>
      <arg value="-version"/>
    </exec>
    <loadfile property="version" srcfile="version.out">
      <filterchain>
        <tokenfilter>
          <replaceregex pattern="[^\d]*(\d.\d.\d).*" replace="\1"/>
        </tokenfilter>
        <striplinebreaks/>
      </filterchain>
    </loadfile>
    <echo level="info" message="version is: '${version}'"/>
  </target>
</project>

Пример вывода

$ ant -version
Apache Ant version 1.6.5 compiled on June 2 2005

$ ant
Buildfile: build.xml

get-version:
     [echo] version is: '1.6.5'

BUILD SUCCESSFUL
Total time: 2 seconds
0 голосов
/ 20 марта 2011

Задача exec имеет 3 атрибута для захвата выходных данных из исполняемого файла:

  • outputproperty => перехватывает стандартный вывод
  • errorproperty => перехватывает stderr
  • resultproperty => ловит код возврата

см. руководство по Ant для exec задачи

Итак, для вашей цели:

  1. используйте outputproperty для перехвата версиизаписывается в стандартный вывод
  2. grep строки версии из outputproperty через функцию замены строк из Flagin плагина Ant

    <project xmlns:fl="antlib:it.haefelinger.flaka">
      <exec executable="bash" outputproperty="bashversion">
        <arg value="--version"/>
      </exec>
      <fl:let>bashversion ::= '#{replace('${bashversion}','$2','(?s)(.+)(\d\.\d\.\d\(.\)?)(.+)')}'</fl:let>
      <fl:echo>
        Bashversion => ${bashversion}
      </fl:echo>
    </project>
    

вывод:

[fl:echo] Bashversion => 4.1.7(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...