17

是否可以有条件地在 Ant属性文件(而不是build.xml)中设置属性值?例如,如果apache.root设置了属性 -my_property将是${apache.root}/myapp/var/www/myapp否则。如果没有,通常的做法是什么 - 可重用build.xml文件?

4

4 回答 4

30

使用条件任务:

<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>
于 2012-11-26T07:21:02.497 回答
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”的文件,具体取决于运行构建的位置。当然,属性指令在当前目录和主目录中查找。所以属性文件可以是构建源的一部分,也可以是构建帐户的主目录。

您可以使用条件标签生成属性文件的部分名称以及选择

于 2013-01-29T19:07:17.407 回答
1

您可以使用的最简单的条件之一是:

<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

于 2017-03-01T13:57:04.570 回答
1

OP 在询问属性文件,而不是在 ant 构建文件中。不幸的是,不能从属性文件中完成条件。您可以做的是为每组依赖属性设置单独的属性文件。例如:

构建.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
于 2017-08-14T22:48:50.610 回答