Использование муравья для обнаружения ОС и установки свойства - PullRequest
42 голосов
/ 17 января 2009

Я хочу установить свойство в задаче муравья по-другому по типу os.

Свойство является каталогом, в Windows я хочу, чтобы оно было "c: \ flag" в unix / linux "/opt/flag".

Мой текущий скрипт работает, только когда я запускаю его с целью по умолчанию, но почему?

    <target name="checksw_path" depends="if_windows, if_unix"/>

<target name="checkos">
    <condition property="isWindows">
        <os family="windows" />
    </condition>

    <condition property="isLinux">
        <os family="unix" />
    </condition>
</target>

<target name="if_windows" depends="checkos" if="isWindows">
   <property name="sw.root" value="c:\flag" />
    <echo message="${sw.root}"/>
</target>

<target name="if_unix" depends="checkos" if="isLinux">
    <property name="sw.root" value="/opt/flag" />
    <echo message="${sw.root}"/>
</target>

Во все мои муравьиные мишени я добавил "зависимость = checkw_path".

Если я запускаю цель по умолчанию в Windows, я получаю правильно "c: \ flag", но если я запускаю цель не по умолчанию, я получаю, что отладка идет в if_windows, но инструкция "" не устанавливает свойство, которое остается / opt / flag. Я использую муравей 1.7.1.

Ответы [ 8 ]

23 голосов
/ 17 января 2009

Переместите ваше состояние из <target />, поскольку ваша цель, вероятно, не вызвана.

 <condition property="isWindows">
                    <os family="windows" />
 </condition>

 <condition property="isLinux">
                    <os family="unix" />
 </condition>
12 голосов
/ 21 октября 2010

Вам необходимо установить значение "true" в свойстве, чтобы условие if работало. Смотрите код ниже:

<target name="checkos">
    <condition property="isWindows" value="true">
            <os family="windows" />
    </condition>

    <condition property="isLinux" value="true">
            <os family="unix" />
    </condition>
</target>

НТН, Хари

6 голосов
/ 22 сентября 2015

Я использовал этот скрипт, и он работал хорошо для меня:

<project name="dir" basedir=".">

  <condition property="isWindows">
    <os family="windows" />
  </condition>

  <condition property="isUnix">
    <os family="unix" />
  </condition>

  <target name="setWindowsRoot" if="isWindows">
    <property name="root.dir" value="c:\tmp\" />
  </target>

  <target name="setUnixRoot" if="isUnix">
    <property name="root.dir" value="/i0/" />
  </target>

  <target name="test" depends="setWindowsRoot, setUnixRoot">
    <mkdir dir="${root.dir}" />
  </target>

</project>
5 голосов
/ 20 апреля 2016

Если вы хотите установить это единственное свойство в зависимости от ОС, вы можете установить его напрямую, без необходимости создавать задачи:

<condition property="sw.root" value="c:\flag">
    <os family="windows" />
</condition>

<condition property="sw.root" value="/opt/flag">
        <os family="unix" />
</condition>

<property name="sw.root" value="/os/unknown/"/>
1 голос
/ 30 июля 2009

Попробуйте установить <sysproperty key="foobar" value="fowl"/> в вашей задаче Java. Затем в вашем приложении используйте System.getProperty ("foobar");

0 голосов
/ 10 мая 2017

Используя Ant Contrib , вы можете упростить свой файл сборки, уменьшив количество элементов, которые необходимо объявить, чтобы добавить эти условия.

<!--Tell Ant to define the Ant Contrib tasks from the jar-->
<taskdef resource="net/sf/antcontrib/antcontrib.properties">
    <classpath>
        <pathelement location="path/to/ant-contrib-0.6.jar"/>
    </classpath>
</taskdef>

<!--Do your OS specific stuff-->
<target name="checkos">
    <if>
        <os family="unix"/>
        <then>
            <!--Do your Unix stuff-->
        </then>
        <elseif>
            <os family="windows"/>
            <then>
                <!--Do your Windows stuff-->
            </then>
        </elseif>
    </if>
</target>
0 голосов
/ 22 ноября 2014

Сначала вы хотите установить для переменной значение true или false в зависимости от операционной системы (ОС):

<condition property="IS_WINDOWS" value="true" else="false">
   <os family="windows"/>
</condition> 

Затем вы хотите запустить свою логику, используя переменную. Для этого вы можете найти ответ здесь:

http://boulderapps.co/running-different-ant-tasks-depending-on-the-operating-system

0 голосов
/ 17 января 2009

Я решил выполнить задачу ant со значением для sw.root, используя -Dsw.root = c: \ flag (для Windows) или -Dsw.root = / opt / superwaba (для Linux).

В любом случае спасибо

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