Если я правильно понимаю, вы выполняете это обнаружение ОС из 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>
, как обсуждалось ранее.Но более вероятно, что они должны исходить из среды выполнения, а не встраиваться в ваш файл сборки.