27

ビルド スクリプトがあり、そのスクリプトの一部として、jar ファイルをディレクトリにコピーします。簡単に言うと、utils jar と呼びます。utils jar は、別のディレクトリにある別のビルド スクリプトによってビルドされます。ビルドスクリプトでutilsビルドスクリプトを実行して、utils jarが最新であることを確認できるようにしようとしています。

したがって、utils ビルド ファイルをインポートする必要があることはわかっています。

<import file="../utils/build/build.xml" />

import タスクは、他のほとんどすべての ant taks とは異なり、basedir から実行されず、pwd から実行されるため、これは機能しません。それで、ビルドファイルを正常にインポートするこの小さな問題を回避するために

  <property name="baseDirUpOne" location=".." />
  <import file="${baseDirUpOne}/utils/build/build.xml" />

インポートの問題を解決したので、タスクを呼び出す必要があります。これは簡単なはずです。

<antcall target="utils.package" />

上記で、utils は ../utils/build/build.xml のプロジェクト名であることに注意してください

私が今直面している問題は、ant 呼び出しが ../utils/build で実行されないことです。そのため、本質的に、runat プロパティまたは同様のものが必要であり、見つけることができません。

<antcall target="utils.package" runat="../utils/build" />

これが必要な理由は、utils ビルド ファイルで、どのコードを jar にコピーするかを選択するステップが相対パスに基づいており、ant ファイルでパスをハードコーディングするのを避けるためです。何か案は?

4

3 に答える 3

33

似たようなセットアップがあります。テストのビルドを処理する別の build.xml を呼び出すメインの Ant build.xml があります。これは私がそれを行う方法です:

<target name="build-tests">
    <subant target="build">
      <fileset dir="${test.home}" includes="build.xml"/>
    </subant>
</target>

トリックは、subantの代わりに使用することですantcall。他のビルド ファイルをインポートする必要はありません。

于 2008-08-12T13:14:50.273 に答える
6

「antcall」タスクの代わりに「ant」タスクを使用してみてください。これは、現在のビルド ファイルにインポートする代わりに、インポートされたビルドを直接実行します。「dir」パラメーターがあります。

新しい Ant プロジェクトの basedir として使用するディレクトリ。inheritall が false に設定されていない限り、現在のプロジェクトの basedir にデフォルト設定されます。 false に設定されている場合、デフォルト値はありません。これにより、呼び出されたプロジェクトの basedir 設定が上書きされます。

したがって、次のことができます。

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" />

またはそのようなもの。

于 2008-08-12T13:20:39.387 に答える
0

antcall ブロッ​​クでネストされたを使用して、パラメータを antcall に渡すことができます。したがって、そのようにプロパティを渡すことができます (プロパティは不変であるため、おそらく basedir でさえ)。

于 2008-09-26T23:15:40.267 に答える