多くのコンポーネントが完全に同じビルドシステムがありますので、ほとんどのビルドタスクで共通のファイルで 'import'を使用するように変更しています。それから、ビルドシステムは、それが依存しているモジュールもビルドする必要があります。だから私はおおよそ...Antのネストされたインポート
common.xml
project1.xml
- import common.xml
project2.xml
- include project1.xml
- import common.xml
common.xmlには「build」という名前のターゲットがあります。私はproject2にproject1を含めることができ、拡張ポイントを使用してビルドターゲットに依存することができるようにしたい。しかし何らかの理由で、プロジェクト1にビルドターゲットがあることを認識しません。 project1.xmlで定義されているターゲットに依存するように変更すると、問題ありません。しかし、私はcommon.xmlにあるターゲットを指定できる必要があります。
どうすればよいですか?
ant-contribはありません。プロジェクトはそれを使用していましたが、私はそれを取り除こうとしているので、恐ろしい手続き型のシステムコードを作成する必要はありません。このプロジェクトには、ダイヤモンドや適切な依存グラフ(antが自動的に生成するもの)のように見える依存関係のケースが多くあり、大きな助けになります。
私は問題を説明するためにいくつかの簡単なファイルを作成しました。
<project name="top" default="build">
<include file="mid.xml" as="mid" />
<target name="build">
<antcall target="mid.build" />
</target>
</project>
<project name="mid" default="build">
<!-- <target name="build"> -->
<!-- <echo message="build mid" /> -->
<!-- </target> -->
<import file="common.xml" />
</project>
<project name="common">
<target name="build">
<echo message="build common" />
</target>
</project>
これは失敗します。 top.xmlはmid.buildを見つけることができません。 ant -pを実行してターゲットをリストすると、ビルドとcommon.buildが表示されます。だから私はmid.xmlビルドファイルに追加しようとしましたが、私はそれを正しくビルドしました。ここでの唯一の問題は、上記の中間のXMLをコメントアウトして独自のビルドステップを定義すると、インポートによって上書きされ無視されるということです。だから、[build、mid.build]ではなく[build、common.build]になります。