我试图在项目声明后更改ant.project.name属性。我知道这不可取,但这是我解决项目大问题的唯一方法。 我发现了一些像这样的有趣帖子:
Ant - How to set ${ant.project.name} to project folder name?
而不是使用:
<project basedir="." default="package">
<basename property="ant.project.name"
file="${basedir}"/>
</project>
我想使用“value”而不是属性“file”直接设置ant.project.name。 你有什么想法或建议吗?或者替代方式?
谢谢!
答案 0 :(得分:2)
正如其他人已经提到的那样,不建议更改标准ant属性的值
此外,设置的属性在设计中也是不可变的,并且有充分的理由。
应该明智地使用覆盖属性,很少使用。
ant.project.name属性通常通过项目的名称属性设置
=&gt;
<project name="whatever">
但它不是强制性的,意味着<project> ... </project>
足以使您的xml成为有效的antscript。
在您的情况下,<echo>${ant.project.name}</echo>
会回显${ant.project.name}
,因为未设置属性,因此您可以在脚本中使用属性任务创建它:
<property name="ant.project.name" value="whatever"/>
。
如果在项目标签内设置了属性,则可以使用内置的javascript引擎和ant api,f.e.通过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)
而不是project.setProperty(String, String)
。 Userproperties是通过-Dkey = value命令行参数定义的属性,享受特殊保护。
Ant还提供了一堆builtin properties