Похоже, ANT <condition>
может проверять имя, семейство и версию операционной системы:
Основываясь на этой ссылке, мы можем запросить некоторые свойства, связанные с ОС.Одним из них является обычное свойство family
, используемое в общем коде:
<!-- CHECK FOR WINDOWS FAMILY OS -->
<condition property="is_windows">
<os family="windows"/>
</condition>
Моя версия ANT не выводит разрешенное значение для ${os.family}
.
Существуеттакже:
- os.name <--- это то, что вам нужно проверить </li>
- os.arch
- os.version
Вот демонстрационный скрипт, который я сделал, чтобы показать использование этих свойств:
<?xml version="1.0" encoding="UTF-8"?>
<project name="Test" default="build" >
<!-- CHECK FOR WINDOWS FAMILY OS -->
<condition property="is_windows">
<os family="windows"/>
</condition>
<condition property="is_windows_7">
<os name="Windows 7"/>
</condition>
<!-- DISPLAYS WINDOWS OS -->
<target name="display_windows" if="is_windows" >
<echo message="OS Family is: Windows" />
</target>
<target name="build" >
<antcall target="display_windows" />
<echo message="OS Name is: ${os.name}" />
<echo message="OS Architecture is: ${os.arch}" />
<echo message="OS Version is: ${os.version}" />
</target>
</project>
После ответа на этот вопрос приведенный выше код был добавлен в нашу производственную сборку.система, в которой она предоставляет общие функциональные возможности для Windows и Mac.
@ thekbb сделал хорошее предложение удалить <antcall target="display_windows" />
и обновить определение цели, чтобы оно зависело от display_windows
согласно приведенному ниже коду:
<target name="build" depends="display_windows">
<echo message="OS Name is: ${os.name}" />
<echo message="OS Architecture is: ${os.arch}" />
<echo message="OS Version is: ${os.version}" />
</target>
Это основано на том факте, что antcall
запускает новый экземпляр ant в новой JVM.Некоторые пользователи могут найти эту оптимизацию проще для понимания;другие могут захотеть сделать это по соображениям производительности.