Как определить версию tomcat и установить переменную env CATALINA_HOME с помощью скрипта Ant Apache? - PullRequest
3 голосов
/ 11 ноября 2011

У меня есть скрипт, который обнаруживает ОС, используя Catalina.bat для Windows и Catalina.sh для UNIX. Он успешно выполняется для UNIX, но для Windows он не может извлечь ОСверсия от Catalina.bat .. причина, которую я выясняю, заключается в том, что в Catalina.bat , когда он выполняет эту строку

if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
echo The CATALINA_HOME environment variable is not defined correctly
echo This environment variable is needed to run this program
goto end
:okHome

, оператор версии ОС не являетсяДостигнуто в catalina.bat файле, так что решение этого, я думаю; явно установить переменную среды CATALINA_HOME, используя сам мой скрипт Ant;как это сделать, пожалуйста, предложите любое решение.

я использовал этот код, здесь свойство OS.version должно было кэшировать версию ОС из файла catalina.bat, аналогичный код в UNIX работает нормально, но яинтересно, что не так

<property name="version" location="${My_proj}\tomcat\bin\catalina.bat"/>
<exec executable="${version}" outputproperty="OS.version">
        <arg value="version" />
          <redirector>
            <outputfilterchain>
               <tokenfilter>
                <containsstring contains="OS Name:"/>
                 <replacestring from="OS Name:        " to=""/> 
                </tokenfilter>
            </outputfilterchain>
         </redirector>


  </exec>

ПРОБЛЕМА О РЕШЕНА: вы были правы ..

<exec executable="cmd" outputproperty="tomcat.version">
      <arg value="/c"/>
      <arg value="${MY_PROJ}\tomcat\bin\version.bat"/>
      <env key="CATALINA_HOME" value="${MY_PROJ}\tomcat\"/>

        <redirector>
        <outputfilterchain>
          <tokenfilter>
            <containsstring contains="Server version"/> 
            <replaceregex pattern="Server version: Apache Tomcat/(.*)$" replace="\1"/>
          </tokenfilter>
        </outputfilterchain>
      </redirector>

    </exec>
    <echo message="tomcat.version: ${tomcat.version}"/>

ВЫХОД:

versioncat:
     [echo] tomcat.version: 6.0.33

ПОСЛЕДНИМ НЕТ МОЖЕТ БЫТЬ ЛЮБОЙ ОТВЕТ ИЛИПРЕДЛАГАЕМ РЕШЕНИЕ ДЛЯ ПОСЛЕДНЕГО ЗАПРОСА КОММЕНТАРИИ ГЛУБОКИЙ ВОПРОС

Ответы [ 3 ]

2 голосов
/ 11 ноября 2011

Если я правильно понимаю, вы выполняете это обнаружение ОС из Ant.В этом случае вы не можете вместо этого использовать встроенную поддержку Ant для идентификации ОС - в условии os ?

Однако, если вам действительно нужно выполнить catalina.bat при установке CATALINA_HOME,Вы можете сделать это, используя вложенный env элемент в вас exec task .

Вот пример файла сборки, который использует оба подхода:

<project default="test">

  <target name="test">

    <!-- Execute a command, in this case a simple bat file
         which echoes the value of the var set in the env block 
    -->
    <exec executable="cmd">
      <arg value="/c"/>
      <arg value="test.bat"/>
      <env key="CATALINA_HOME" value="whatever"/>
    </exec>

    <!-- echo the values of built-in OS related properties -->
    <echo message="os.arch: ${os.arch}"/>
    <echo message="os.name: ${os.name}"/>
    <echo message="os.version: ${os.version}"/>

    <!-- test one of the os conditions -->
    <condition property="is.windows">
      <os family="windows"/>
    </condition>
    <echo message="is.windows ? ${is.windows}"/>

  </target>

</project>

Вотсодержание test.bat:

echo CATALINA_HOME=%CATALINA_HOME%

Вот вывод:

test:
     [exec]
     [exec] C:\tmp\ant>echo CATALINA_HOME=whatever
     [exec] CATALINA_HOME=whatever
     [echo] os.arch: x86
     [echo] os.name: Windows XP
     [echo] os.version: 6.1 build 7601 Service Pack 1
     [echo] is.windows ? true

Относительно вашего последующего вопроса (в комментариях) о версии tomcat ...

Теперь я предполагаю, что вы выполняете это определение версии с помощью Ant в своей среде выполнения.

Ant и Java не знают о вашей среде Tomcat, поэтому теперь вы вернулись к выполнению %CATALINA_HOME%\bin\catalina.bat -version и анализу того, что вам нужноиз вывода.

Вот рабочий пример:

<project default="version">
  <property environment="env"/>

  <condition property="script.ext" value="bat">
    <os family="windows"/>
  </condition>
  <condition property="script.ext" value="sh">
    <os family="unix"/>
  </condition>

  <target name="version">
    <exec executable="${env.CATALINA_HOME}/bin/version.${script.ext}" outputproperty="tomcat.version">
      <redirector>
        <outputfilterchain>
          <tokenfilter>
            <containsstring contains="Server version"/> 
            <replaceregex pattern="Server version: Apache Tomcat/(.*)$" replace="\1"/>
          </tokenfilter>
        </outputfilterchain>
      </redirector>
    </exec>
    <echo message="tomcat.version: ${tomcat.version}"/>
  </target>
</project>

А вот вывод:

version:
     [echo] tomcat.version: 5.5.33

Обратите внимание, что в этом примере предполагается, что у вас есть CATALINA_HOME (и JAVA_HOME) переменная окружения, установленная в вашемтерминал.

В качестве альтернативы, вы можете передать эти переменные, используя вложенный элемент <env>, как обсуждалось ранее.Но более вероятно, что они должны исходить из среды выполнения, а не встраиваться в ваш файл сборки.

0 голосов
/ 20 ноября 2015

В зависимости от вашей ситуации этот подход может оказаться немного более независимым от платформы и менее подверженным ошибкам, так как вам не нужно разбирать оболочку.Это работает по крайней мере еще в Tomcat 6.x

<property environment="env"/>
<loadproperties>
  <zipentry zipfile="${env.CATALINA_HOME}/bin/bootstrap.jar" name="META-INF/MANIFEST.MF"/>
  <filterchain>
    <prefixlines prefix="tomcat."/>
  </filterchain>
</loadproperties>

<!-- Prints MAJOR.MINOR version, e.g.: 8.0 -->
<echo message="Tomcat Version: ${tomcat.Specification-Version}"/>

<!-- Prints full version, e.g.: 8.0.26 -->
<echo message="Tomcat Release: ${tomcat.Implementation-Version}"/>
0 голосов
/ 11 ноября 2011

Сделай так:

<condition property="catalina.path" value="C:\Foo\catalina.bat">
   <os family="windows"/>
</condition>
<condition property="catalina.path" value="/home/foo/catalina.sh">
   <os family="unix"/>
</condition>

<exec> ... execute your script here </exec>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...