Как обнаружить ОС Windows в ANT - PullRequest
6 голосов
/ 05 марта 2012

Я использую ant для компиляции приложения Java. Проблема в том, что некоторые разработчики работают на Win 7, а другие на XP и Vista. Частью компиляции является сборка MSI с использованием WIX, на win7 это один каталог, а на xp и vista - в другом.

Задача муравья контролируется в Maven. Я пытаюсь объяснить разницу между ОС Windows в ant с помощью условного тега для установки каталога wix. Есть идеи?

Я знаю, что это будет в следующем формате:

<if>
   <condition property="isWin7">
    Check for windows 7
   </condition>
   <then>
    set wix path to win 7 installation
   </then>
   <else>
    set to vista/xp wix installation
   </else>
 </if>

Любая помощь будет великолепна.

1 Ответ

14 голосов
/ 09 июля 2012

Похоже, 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.Некоторые пользователи могут найти эту оптимизацию проще для понимания;другие могут захотеть сделать это по соображениям производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...