我在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
。如果这是正确的做法或任何其他选择,请告诉我。
答案 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
属性。