【发布时间】:2015-03-26 13:08:09
【问题描述】:
我想覆盖导入的 Ant 文件的一些属性,该文件处理部署应用程序的大部分基本内容。首先我知道 Ant 中的属性是不可变的。但我可以想出两种方法来“覆盖”我的需要的属性,我想知道,哪一种应该是首选方法,和/或是否有任何事情需要考虑以一种或另一种方式进行。
假设我们有以下 master-build-script,我喜欢将其导入到我的构建脚本中:
<project name="Application" default="build" basedir=".">
<property name="overridden" value="false" />
<target name="build">
<echo message="Value of overridden is ${overridden}" />
</target>
</project>
现在我想覆盖 overridden 属性。在这两种情况下,我都会导入 master-build-file。我使用导入而不是包含,因为我还想覆盖一些目标。我知道有两种可能的解决方案来覆盖它们:
1) 由于属性是不可变的,我可以通过在实际导入主文件之前定义它们来定义我想要“覆盖”的属性:
<project name="MyApplication" default="buildApplication" basedir=".">
<property name="overridden" value="true" />
<import file="master-build.xml" />
<target name="buildApplication">
<antcall target="build" />
</target>
</project>
2) 我在 Ant 调用中定义了 Params,这似乎也重新定义了属性值:
<project name="MyApplication" default="buildApplication" basedir=".">
<import file="master-build.xml" />
<target name="buildApplication">
<antcall target="build" >
<param name="overridden" value="true"/>
</antcall>
</target>
</project>
在这两种情况下,结果都是:
build:
[echo] Value of overridden is true
BUILD SUCCESSFUL
谁能这么好心,可以解释我的区别,也可以解释为什么我应该使用一种方法而不是另一种方法,甚至应该使用不同的方法来获得相同的结果?
【问题讨论】:
标签: java ant properties