Ответ 1
Я решил выполнить задачу ant со значением для sw.root, используя -Dsw.root = c:\flag (для Windows) или -Dsw.root =/opt/superwaba (для linux).
В любом случае спасибо
Я хочу установить свойство в задаче ant по-разному с помощью типа os.
Свойство - это каталог, в окнах я хочу, чтобы он был "c:\flag" в unix/linux "/opt/flag".
Мой текущий script работает только тогда, когда я запускаю его с целью по умолчанию, но почему?
<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>
Во всех моих объектах ant я добавил "depend = checksw_path".
Если я запускаю цель по умолчанию в Windows, я правильно понял "c:\флаг", но если я запустил цель не по умолчанию, у меня получилось, что отладка идет в if_windows, но инструкция "" не устанавливает свойство, которое остается /opt/flag. Я использую ant 1.7.1.
Я решил выполнить задачу ant со значением для sw.root, используя -Dsw.root = c:\flag (для Windows) или -Dsw.root =/opt/superwaba (для linux).
В любом случае спасибо
Переместите свое состояние из <target />
, так как ваша цель, вероятно, не вызывается.
<condition property="isWindows">
<os family="windows" />
</condition>
<condition property="isLinux">
<os family="unix" />
</condition>
Вам нужно установить значение "true" для свойства для условия if. См. Код ниже:
<target name="checkos">
<condition property="isWindows" value="true">
<os family="windows" />
</condition>
<condition property="isLinux" value="true">
<os family="unix" />
</condition>
</target>
НТН, Хари
Я использовал такой script и работал хорошо для меня:
<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>
Если вы хотите установить это единственное свойство на основе ОС, вы можете установить его напрямую, не требуя создания задач:
<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/"/>
Попробуйте установить <sysproperty key="foobar" value="fowl"/>
в задаче java.
Затем в вашем приложении используйте System.getProperty( "foobar" );
Сначала вы хотите установить переменную в true или false на основе операционной системы (OS):
<condition property="IS_WINDOWS" value="true" else="false">
<os family="windows"/>
</condition>
Затем вы хотите вызвать свою логику с помощью переменной. Для этого вы можете найти ответ здесь:
http://boulderapps.co/running-different-ant-tasks-depending-on-the-operating-system
Используя 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>