Ant property
タスクの値を再割り当てする方法はありますか?または、その目的に使用できる別のタスクはありますか?
変更したプロパティの使用方法に応じて、macrodef
sを使用できます。
たとえば、次を書く代わりに:
<target name="foo">
<echo message="${my_property}"/>
</target>
別のメッセージで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>
ant-contrib'sVariable
タスクはこれを行うことができます:
<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 -->
ただし、Antスクリプトの一部が不変のプロパティ値を想定し、他の部分がこの想定を破ると、お勧めできませんが、奇妙な副作用につながる可能性があります。
正義のために、追加のライブラリなしで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>
使用法:
<property name="x" value="10"/>
<propertyreset name="x" value="11"/>
<echo>${x}</echo> <!-- will print 11 -->
他の人が述べたように、これはすべての標準的なアプローチが適合しないことが判明した後、注意して使用する必要があります。
プロパティはantでは不変です。
ant-contrib の var
task に興味があるかもしれません。
<var name="my_var" value="${my_property}" />
<echo>Addressed in the same way: ${my_var} and ${my_property}</echo>
Ant 1.8以降、「ローカル」タスクを使用して、ターゲット内のプロパティの値を変更できます。これは、同じ名前のグローバルプロパティの値を変更しないことに注意してくださいが、いくつかの問題を解決する方法です。
見る
Antのプロパティの値を変更することはできません。
異なる値を繰り返し渡して実行したいAntタスクがある場合、 macrodef
task をお勧めします。異なる属性を渡して同じマクロを繰り返し実行できるからです。
例えば:
<macrodef name="copythings">
<attribute name="todir"/>
<sequential>
<copy todir="@{todir}">
<fileset dir="${src}">
<exclude name='**/*svn' />
</fileset>
</copy>
</sequential>
</macrodef>
<copythings todir="/path/to/target1"/>
<copythings todir="/path/to/target2"/>
${property}
はプロパティの参照に使用され、@{attribute}
は<macrodef>
タスクに渡される属性の参照に使用されることに注意してください。
プロパティはantでは不変です。しかし、それは見かけほどひどい制限ではありません。 (ほとんどの)変数が定数であるにもかかわらず、それらが実行されるプログラミング言語のクラスがあります。これは「関数型プログラミング」と呼ばれます。
異なるタスクが使用する値を「変更」するには、古いプロパティから新しいプロパティを変更するか、subant
またはantcall
タスクでタスクを呼び出すときにパラメーターを変更します。創造力があれば、通常は問題を解決する方法を見つけることができます。
Basenameコマンドでlocalを使用したサンプルを次に示します。 Var-unsetは私には機能しません。
<for param="db-patches">
<path>
<fileset dir="${undeployed-files}" includes="**/ddl*.Zip"/>
</path>
<sequential>
<local name="inpfile" />
<basename property="inpfile" file="@{db-patches}" suffix=".Zip" />
<!-- unzip the patch -->
<unzip src="${undeployed-files}/${inpfile}.Zip"
dest="${unzipped-patches}/${inpfile}" />
<move file="${undeployed-files}/${inpfile}.Zip" tofile="${deployed-files}/${inpfile}.Zip"/>
</sequential> </for>