覆盖Ant目标中的属性
我们在从Eclipse运行的Ant脚本中使用了很多属性。我想建立一个并行部署,它使用稍微不同的属性值构建项目,并部署到不同的位置。。。部署位置也是一个属性 [如何]我的新目标可以将某些属性更新为自定义测试值,然后运行普通目标以获得所需结果 非常欢迎使用简单的示例脚本,我只知道足够的Ant:)覆盖Ant目标中的属性,ant,Ant,我们在从Eclipse运行的Ant脚本中使用了很多属性。我想建立一个并行部署,它使用稍微不同的属性值构建项目,并部署到不同的位置。。。部署位置也是一个属性 [如何]我的新目标可以将某些属性更新为自定义测试值,然后运行普通目标以获得所需结果 非常欢迎使用简单的示例脚本,我只知道足够的Ant:) < /代码> 您可以使用ANTLCAL()在调用的目标中使用PARAM重写属性,例如,考虑这个文件示例ANTCALL属性。 <?xml version="1.0" encoding="UTF-8"?&
< /代码> 您可以使用ANTLCAL()在调用的目标中使用PARAM重写属性,例如,考虑这个文件示例ANTCALL属性。
<?xml version="1.0" encoding="UTF-8"?>
<project name="AntCall Properties and Params" default="first">
<property name="my.property" value="initial" />
<target name="first">
<echo message="main: my.property=${my.property}"/>
<antcall target="second" />
<antcall target="second">
<param name="my.property" value="changed"/>
</antcall>
<antcall target="second" />
</target>
<target name="second">
<echo message="second: my.property=${my.property}"/>
<antcall target="third" />
</target>
<target name="third">
<echo message="third: my.property=${my.property}"/>
</target>
</project>
请注意,在使用“param”第二次调用target“second”时,属性的值发生了更改(在本例中,该更改被传播到在被调用的target“third”内调用的目标),但在其他调用中没有更改(不带“param”)
然而,正如文件中所述
在命令行上定义的属性不能被嵌套的
元素覆盖
这可以通过以下调用看到:
ant -f example-antcall-properties.ant -Dmy.property="from command line"
Buildfile: example-antcall-properties.ant
first:
[echo] main: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
BUILD SUCCESSFUL
Total time: 0 seconds
重写属性可以通过将逻辑拆分为单独的文件来完成,这些文件可以作为基础包含,然后被重写
例如,创建一个基本文件,如base.xml
,它包含所有默认属性和目标:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- Sets the default properties. Override in your main build file when needed. -->
<property name="admin.user" value="admin"/>
<property name="admin.pass" value="admin"/>
<target name="job1"/>
<target name="job2"/>
</project>
GitHub上的示例:
对于并行执行,您可以使用。对从Eclipse运行Ant知之甚少,但在命令行中我使用类似于-Dpame=pvalue
的参数来指定属性。有效的属性始终是首先指定的属性,命令行参数是第一个。我已经在单独的属性文件中指定了这些属性。。。我需要重写它们,来点代码怎么样?您只需要指定一个新的属性文件,或者我们在这里误解了您的意思。不,一个新的属性文件是不好的。我有数百个属性,我只想让我的目标覆盖其中的5个。一个
可以设置属性值吗?var
不是Ant本身的一部分,但这是除了预先设置覆盖值之外,我能找到的唯一方法。只有当元素位于元素之后时,这才有效,因为设置属性的人会阻止它随后的更改。
ant -f example-antcall-properties.ant -Dmy.property="from command line"
Buildfile: example-antcall-properties.ant
first:
[echo] main: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
BUILD SUCCESSFUL
Total time: 0 seconds
<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- Sets the default properties. Override in your main build file when needed. -->
<property name="admin.user" value="admin"/>
<property name="admin.pass" value="admin"/>
<target name="job1"/>
<target name="job2"/>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProject">
<!-- Override properties -->
<property name="admin.user" value="root"/>
<property name="admin.pass" value="new_pass"/>
<!-- Import default properties -->
<import file="${basedir}/base.xml"/>
<!--<import><url url="https://example.com/base.xml"/></import>-->
<target name="job1">
<!-- Overriden job1 -->
</target>
<target name="job2">
<!-- Overriden job2 -->
</target>
</project>