Eclipseから実行されるAntスクリプトでは多くのプロパティを使用します。わずかに異なるプロパティ値でプロジェクトをビルドし、別の場所にデプロイする並列デプロイメントをセットアップしたい...デプロイ場所もプロパティです。
[どのように]新しいターゲットでいくつかのプロパティをカスタムテスト値に更新してから、通常のターゲットを実行して目的の結果を得ることができますか?
簡単なサンプルスクリプトは大歓迎です、私は通り抜けるのに十分なAntしか知りません:)
Eclipseから実行されるAntスクリプトでは多くのプロパティを使用します。わずかに異なるプロパティ値でプロジェクトをビルドし、別の場所にデプロイする並列デプロイメントをセットアップしたい...デプロイ場所もプロパティです。
[どのように]新しいターゲットでいくつかのプロパティをカスタムテスト値に更新してから、通常のターゲットを実行して目的の結果を得ることができますか?
簡単なサンプルスクリプトは大歓迎です、私は通り抜けるのに十分なAntしか知りません:)
antcall(https://ant.apache.org/manual/Tasks/antcall.html)を使用して、呼び出されたターゲットのparamを使用してプロパティをオーバーライドできます。たとえば、このファイルexample-antcall-properties.antを検討してください。
<?xml version="1.0" encoding="UTF-8"?>
<project name="AntCall Properties and Params" default="first">
<property name="my.property" value="initial" />
<target name="first">
<echo message="main: my.property=${my.property}"/>
<antcall target="second" />
<antcall target="second">
<param name="my.property" value="changed"/>
</antcall>
<antcall target="second" />
</target>
<target name="second">
<echo message="second: my.property=${my.property}"/>
<antcall target="third" />
</target>
<target name="third">
<echo message="third: my.property=${my.property}"/>
</target>
</project>
結果を見る
ant -f example-antcall-properties.ant
Buildfile: example-antcall-properties.ant
first:
[echo] main: my.property=initial
second:
[echo] second: my.property=initial
third:
[echo] third: my.property=initial
second:
[echo] second: my.property=changed
third:
[echo] third: my.property=changed
second:
[echo] second: my.property=initial
third:
[echo] third: my.property=initial
BUILD SUCCESSFUL
Total time: 0 seconds
プロパティの値は、「param」を使用したターゲット「second」の2回目の呼び出しで変更されました(変更は、呼び出されたターゲット(この例では「third」)内で呼び出されたターゲットに伝播されます)が、他の呼び出しでは変更されないことに注意してください。 (「param」なし)。
ただし、ドキュメントhttps://ant.apache.org/manual/Tasks/antcall.htmlで報告されているように、
<param>
コマンドラインで定義されたプロパティは、ネストされた要素で上書きできません。
これは、この呼び出しで確認できます。
ant -f example-antcall-properties.ant -Dmy.property="from command line"
Buildfile: example-antcall-properties.ant
first:
[echo] main: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
second:
[echo] second: my.property=from command line
third:
[echo] third: my.property=from command line
BUILD SUCCESSFUL
Total time: 0 seconds
<?xml version="1.0" encoding="UTF-8" ?>
<project default="all" basedir=".">
<taskdef resource="net/sf/antcontrib/antcontrib.properties" />
<target name="all">
<property name="prop" value="1" />
<echo message="prop = ${prop}" />
<var name="prop" unset="true"/>
<property name="prop" value="2" />
<echo message="prop = ${prop}" />
</target>
</project>
プロパティのオーバーライドは、ロジックを個別のファイルに分割し、ベースとして含めてからオーバーライドすることで実行できます。
たとえば、base.xml
すべてのデフォルトのプロパティとターゲットで構成されるベースファイルを作成します。
<?xml version="1.0" encoding="UTF-8"?>
<project>
<!-- Sets the default properties. Override in your main build file when needed. -->
<property name="admin.user" value="admin"/>
<property name="admin.pass" value="admin"/>
<target name="job1"/>
<target name="job2"/>
</project>
次に、メインファイル(などbuild.xml
)で、プロパティをオーバーライドしてからimport
、ベースファイルをオーバーライドします。
<?xml version="1.0" encoding="UTF-8"?>
<project name="MyProject">
<!-- Override properties -->
<property name="admin.user" value="root"/>
<property name="admin.pass" value="new_pass"/>
<!-- Import default properties -->
<import file="${basedir}/base.xml"/>
<!--<import><url url="https://example.com/base.xml"/></import>-->
<target name="job1">
<!-- Overriden job1 -->
</target>
<target name="job2">
<!-- Overriden job2 -->
</target>
</project>
GitHubでの例:National-Theatre/base-build-xml
。
並列実行の場合、parallel
タスクを使用できます。