我在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>
这是我的。属性文件:#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:tmpbuild.xml
input:
[echo] Taking user input
[input] Please enter db-username:
me
[propertyfile] Updating property file: D:tmpmy.properties
test:
[echo] test
BUILD SUCCESSFUL
Total time: 4 seconds
但我的文件。属性更新为user=me
。请告诉我这是正确的做法还是其他的方法
有趣的场景,您可以按照现在的方式进行操作。没有问题,只是不必要的复杂维护。
如果你有不同的数据库用户名,你应该在属性文件中预先定义,而不是在执行时覆盖。
dev.username="dev1234"(..${db.user})
qa.username="q1234"
prod.username="prodxxx"
首先,一旦设置了Ant属性,它的值是不可变的。它不能改变。
其次,一旦使用<property file="my.properties"/>
设置了属性,该属性的值就不能更改。即使my.properties
已经改变,对<property file="my.properties"/>
的进一步调用也不会覆盖任何现有的属性。
第三,test
目标中的<echo>
不回显用户的输入。
…
<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>
上面的代码在my.properties
中创建了一个名为username
的属性。但是,脚本的其余部分引用了普通的user
属性。