2012-11-25 54 views
11

是否有可能以有条件的方式在Ant 属性文件(而不是build.xml)中设置属性值?例如,如果apache.root属性已设置 - 否则my_property将为${apache.root}/myapp/var/www/myapp。如果没有,那么常见的做法是什么 - 可重复使用的文件是build.xml蚂蚁属性文件中的条件属性

回答

24

使用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> 
+0

谢谢。但是,我问的是'property'文件,而不是'build.xml'。或者,如果我对你有所了解,“条件”任务是实现目标的唯一方法吗? – BreakPhreak

+0

你可以阅读build xml中的属性文件,并且以后可以根据相关属性定义新属性... – Vishal

+0

我希望有一些可以重复使用的属性文件(有条件)可以被几个'build.xml '文件。我瞄准了错误的方向吗? – BreakPhreak

1

可以包括基于环境或条件变量不同的属性文件。例如

对于
<echo>Building ${ant.project.name} on OS: ${os.name}-${os.arch}</echo> 
<property file="build-${os.name}.properties" /> 

这将包括一个名为“建窗口7.properties”或取决于那里,并正在运行“build-Linux.properties”文件。当然,property指令在当前目录以及主目录中查找。所以属性文件可以是构建源的一部分,也可以是构建帐户的主目录。

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

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

0

OP询问属性文件,而不是在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