<propertyfile> 执行后提交 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>
这是我的。属性文件:
#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属性。

相关内容

  • 没有找到相关文章