2014-11-03 136 views
1

我试图在ant项目中设置一些全局属性。属性文件被属性任务覆盖的属性文件

<property file="env/${deploy.servername}.properties" /> 
<property name="deploy.username" value="${env.USERNAME}" /> 

由于蚂蚁任务由一个詹金斯参数项目env.USERNAME始终设置,但并不总是正确触发。

我的这个设计的目标是,如果物业deploy.usernamedeploy.servername存在于文件中的文件应设置属性和蚂蚁应该让物业被重置价值在env.USERNAME应该被忽略。

不幸的是,env.USERNAME提供的价值总是脚本使用的值。为什么?蚂蚁在property file=*之前评估property name=*?由property file=*设置的属性是否可变?

感谢您的帮助

回答

0

在ant中,一旦设置属性是不可变的设计。当使用不同的机制来创建财产时,没有特定的顺序 - 财产的第一个声明获胜。
鉴于propertyfile foo.properties有:

JAVA_HOME=some/path 

示例脚本

<project> 

    <property file="foo.properties"/> 
    <property name="JAVA_HOME" value="foobar"/> 

    <property environment="env"/> 
    <property name="JAVA_HOME" value="${env.JAVA_HOME}"/> 

    <echo>$${JAVA_HOME} => ${JAVA_HOME}</echo> 

</project> 

输出

[echo] ${JAVA_HOME} => some/path 

这意味着该属性已被定义在别处。
摆在那行:

<echo>$${deploy.username} => ${deploy.username}</echo> 

前:

<property file="env/${deploy.servername}.properties"/> 

,看看属性已经存在。