我有一个属性
base.number = 100
我想根据要添加的值创建值102、103、105等。
如何将数字添加到属性并获得附加值?
您不需要额外的ant任务或额外的脚本语言来进行数学运算,只需使用内置的javascript脚本引擎(自jdk 1.6起,Sun自己基于rhino 1.6 r2的实现)结合ant api并放入macrodef以供重用,即:
<project>
<property name="foo" value="22"/>
<echo>$${foo} => ${foo}</echo>
<!-- create macrodef -->
<macrodef name="math">
<attribute name="operation"/>
<attribute name="operator1"/>
<attribute name="operator2"/>
<attribute name="result"/>
<sequential>
<script language="javascript">
tmp = 0;
switch ("@{operation}")
{
case "+" :
tmp = parseInt("@{operator1}") + parseInt("@{operator2}");
break;
case "-" :
tmp = parseInt("@{operator1}") - parseInt("@{operator2}");
break;
case "*" :
tmp = parseInt("@{operator1}") * parseInt("@{operator2}");
break;
case "/" :
tmp = parseInt("@{operator1}") / parseInt("@{operator2}");
break;
}
project.setProperty("@{result}", tmp);
</script>
</sequential>
</macrodef>
<!-- create new properties -->
<math operation="/" operator1="${foo}" operator2="11" result="foooo"/>
<math operation="+" operator1="${foo}" operator2="21" result="fooo"/>
<!-- overwrite existing property foo -->
<math operation="+" operator1="${foo}" operator2="1" result="foo"/>
<echo>
create => $${fooo} => ${fooo}
create => $${foooo} => ${foooo}
overwrite => $${foo} => ${foo}
</echo>
</project>
如果您需要覆盖现有的userproperty(=那些在命令行上通过ant -f foobar.xml -Dmyuserproperty=foo…定义的属性),您必须使用方法:
project.setUserProperty()
可以使用<buildnumber>
任务,该任务默认文件名为build.number
。amine评论链接中的建议更一般:<propertyfile>
任务可以设置、增加、减少或删除属性。
<propertyfile file="number.properties">
<entry key="base.number" type="int" operation="+" value="1"/>
</propertyfile>
Ant contrib有一个Math任务。它可以在其他东西中添加数字。这意味着你:
- 读取属性
- 使用数学任务添加数字
这是一个使用javascript脚本引擎允许任意表达式的宏:
<macrodef name="property-exp">
<attribute name="name" />
<attribute name="value" />
<sequential>
<script language="javascript">
project.setProperty("@{name}", eval(@{value}));
</script>
</sequential>
</macrodef>
<property name="old-version" value="new-version" />
<property-exp name="new-version" value="${old-version} + 1" />
<echo>old=${old-version}, new=${new-version}</echo>