正如其他人已经提到的,不建议更改标准 ant 属性的值。
此外,一旦设置属性在 ant 中就设计为不可变,并且有充分的理由。
应明智且很少使用覆盖属性。
ant.project.name 属性通常通过 project
=> 的 name 属性设置
<project name="whatever"> 但这不是强制性的,这意味着
<project> ... </project> 足以使您的 xml 成为有效的 antscript。
在您的情况下,<echo>${ant.project.name}</echo> 会回显 ${ant.project.name},
因为未设置属性,因此您可以在脚本中使用属性任务创建它:
<property name="ant.project.name" value="whatever"/>.
但是使用通常的属性名用于“ant internals”似乎不是最佳选择。
如果在项目标签中设置了属性,则可以使用内置的 javascript 引擎和 ant api、fe 通过 script task 覆盖该值:
<project name="foo">
<property name="bla" value="foobar"/>
<echo>1. $${ant.project.name} => ${ant.project.name}</echo>
<script language="javascript">
project.setUserProperty('ant.project.name', project.getProperty('bla'));
</script>
<echo>2. $${ant.project.name} => ${ant.project.name}</echo>
</project>
输出:
[echo] 1. ${ant.project.name} => foo
[echo] 2. ${ant.project.name} => foobar
注意: 因为 ant.project.name 不是“普通”属性(通过 ant 脚本中的属性任务声明的属性),您必须使用方法 project.setUserProperty(String, String) 而不是 @987654331 @。用户属性是通过 -Dkey=value 命令行参数定义的属性,享有特殊保护。
Ant还提供了一堆builtin properties