ska*_*man 34
ant-contrib的 Variable
任务可以做到这一点:
<property name="x" value="6"/>
<echo>${x}</echo> <!-- will print 6 -->
<var name="x" unset="true"/>
<property name="x" value="12"/>
<echo>${x}</echo> <!-- will print 12 -->
Run Code Online (Sandbox Code Playgroud)
但是,不建议,如果Ant脚本的某些部分采用不可变属性值,则可能导致奇怪的副作用,而其他部分则会破坏此假设.
Vad*_*zim 22
为了正义起见,有一个hack允许在没有任何额外的lib的情况下改变ant的不可变属性(因为java 6):
<scriptdef name="propertyreset" language="javascript"
description="Allows to assign @{property} new value">
<attribute name="name"/>
<attribute name="value"/>
project.setProperty(attributes.get("name"), attributes.get("value"));
</scriptdef>
Run Code Online (Sandbox Code Playgroud)
用法:
<property name="x" value="10"/>
<propertyreset name="x" value="11"/>
<echo>${x}</echo> <!-- will print 11 -->
Run Code Online (Sandbox Code Playgroud)
正如其他人所提到的,在所有规范方法证明不合适之后,应谨慎使用.
jam*_*esh 11
属性在ant中是不可变的.
您可能对ant-contrib的var
任务感兴趣.
<var name="my_var" value="${my_property}" />
<echo>Addressed in the same way: ${my_var} and ${my_property}</echo>
Run Code Online (Sandbox Code Playgroud)
Vla*_*mir 11
根据您要使用修改后的属性的方式,您可以使用macrodef
s.
例如,而不是编写以下内容:
<target name="foo">
<echo message="${my_property}"/>
</target>
Run Code Online (Sandbox Code Playgroud)
并且无法ant foo
使用其他消息进行呼叫,您可以写道:
<macrodef name="myecho">
<attribute name="msg"/>
<sequential>
<echo message="@{msg}"/>
</sequential>
</macrodef>
<target name="foo">
<myecho msg="${my_property}"/>
<property name="my_property2" value="..."/>
<myecho msg="${my_property2}"/>
</target>
Run Code Online (Sandbox Code Playgroud)
从Ant 1.8开始,您可以使用"本地"任务来更改目标中属性的值.请注意,这不会更改具有相同名称的全局属性的值,但它是解决某些问题的方法.
看到
http://ant.apache.org/manual/Tasks/local.html
归档时间: |
|
查看次数: |
60993 次 |
最近记录: |