Можно ли условно установить значение свойства в файлах свойств Ant (в отличие от build.xml
)? Например, если установлено свойство apache.root
- my_property
будет ${apache.root}/myapp
, /var/www/myapp
иначе. Если нет, какова будет обычная практика - многоразовые файлы build.xml
?
Условное свойство в файле свойств Ant
Ответ 1
Используйте задачу condition:
<project name="demo" default="run">
<condition property="my_property" value="${apache.root}/myapp" else="/var/www/myapp">
<isset property="apache.root"/>
</condition>
<target name="run">
<echo message="my_property=${my_property}"/>
</target>
</project>
Ответ 2
Вы можете включать в себя различные файлы свойств на основе сред или условных переменных. Например
<echo>Building ${ant.project.name} on OS: ${os.name}-${os.arch}</echo>
<property file="build-${os.name}.properties" />
это будет включать файл с именем "build-Windows 7.properties" или "build -Linux.properties" в зависимости от того, где выполняется сборка. Разумеется, директива property выглядит в текущем каталоге, а также в домашнем каталоге. Таким образом, файл свойств может быть частью источника сборки или в домашнем каталоге учетной записи сборки.
Вы можете использовать тег условия для генерации части имени файла свойства, а также для выбора
Ответ 3
Одним из простейших форм условия вы можете использовать:
<exec executable="hostname" outputproperty="hostname"/>
<condition property="python" value="/usr/bin/python3.4">
<equals arg1="${hostname}" arg2="host0"/>
</condition>
<property name="python" value="/usr/bin/python"/>
для размещения, например, другого пути установки python. Здесь путь установки по умолчанию -/usr/bin/python, за исключением host0, где он/usr/bin/python3.4
Ответ 4
ОП запрашивал файл свойств, а не в файле сборки ant. К сожалению, условные выражения не могут быть выполнены из файла свойств. Что вы можете сделать, так это отдельные файлы свойств для каждого набора зависимых свойств. Например:
build.xml
<condition property="app.name" value="appA">
<equals arg1="${appName}" arg2="A" />
</condition>
<condition property="app.name" value="appB">
<equals arg1="${appName}" arg2="B" />
</condition>
<property file="${app.name}.properties" />
<!-- since properties are immutable, set your defaults here -->
<property name="apache.root" value="/var" />
<property file="restOfProps.properties" />
appA.properties
apache.root=/appA
restOfProps.properties
my_property=${apache.root}/myapp