ANT <propertyfile>任务更改在执行</propertyfile>后提交

时间:2014-05-23 15:56:39

标签: java ant

我在ANT构建脚本中使用属性文件。现在,我正在根据用户输入修改文件中的一些属性。问题是更改在执行期间无效,但一旦执行完成。

这是ANT脚本:

<project name="testProject" default="test" basedir=".">
    <property file="my.properties"/>
    <target name="test" depends="input">
        <echo>${user}</echo>
    </target>

    <target name="input">
        <echo>Taking user input</echo>
        <input message="Please enter db-username:" addproperty="db.user"/>

        <propertyfile   file="my.properties">
            <entry  key="user" value="${db.user}"/>
        </propertyfile>
    </target>
</project>

这是my.properties文件:

#Fri, 23 May 2014 21:23:43 +0530
#My properties
#Thu, 22 May 2014 19:01:12 +0530
test=1
user=test

以下是运行后的输出:

D:\tmp>ant
Buildfile: D:\tmp\build.xml

input:
     [echo] Taking user input
    [input] Please enter db-username:
me
[propertyfile] Updating property file: D:\tmp\my.properties

test:
     [echo] test

BUILD SUCCESSFUL
Total time: 4 seconds

但my.properties文件更新为user=me。如果这是正确的做法或任何其他选择,请告诉我。

2 个答案:

答案 0 :(得分:0)

有趣的场景,您可以按照现在的方式行事。没有问题,但维护不必要的复杂。

如果您有不同的db用户名,则应在属性文件中预先定义,而不是在执行期间覆盖。

dev.username="dev1234"(..${db.user})
qa.username="q1234"


prod.username="prodxxx"

答案 1 :(得分:0)

首先,一旦设置了Ant属性,其值就是不可变的。它无法改变。

其次,一旦使用<property file="my.properties"/>设置了某个属性,该属性的值就无法更改。即使my.properties已更改,对<property file="my.properties"/>的进一步调用也不会覆盖任何现有属性。

第三,<echo>目标中的test并未回应用户的输入。

此...

<target name="test" depends="input">
    <echo>${user}</echo>
</target>

......应该......

<target name="test" depends="input">
    <echo>${db.user}</echo>
</target>

最后,<propertyfile>任务似乎在my.properties中创建了一个新属性:

<propertyfile   file="my.properties">
    <entry  key="username" value="${db.user}"/>
</propertyfile>

以上在username中创建了一个名为my.properties的属性。但是,脚本的其余部分引用了普通的user属性。