6

Eclipseから実行されるAntスクリプトでは多くのプロパティを使用します。わずかに異なるプロパティ値でプロジェクトをビルドし、別の場所にデプロイする並列デプロイメントをセットアップしたい...デプロイ場所もプロパティです。

[どのように]新しいターゲットでいくつかのプロパティをカスタムテスト値に更新してから、通常のターゲットを実行して目的の結果を得ることができますか?

簡単なサンプルスクリプトは大歓迎です、私は通り抜けるのに十分なAntしか知りません:)

4

3 に答える 3

8

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
于 2014-05-08T07:37:39.287 に答える
6
<?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>
于 2013-02-25T20:53:57.573 に答える
2

プロパティのオーバーライドは、ロジックを個別のファイルに分割し、ベースとして含めてからオーバーライドすることで実行できます。

たとえば、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タスクを使用できます。

于 2018-03-22T12:01:11.067 に答える