2011-12-19 4 views
3

私はすべてがこのように、同じベースのビルドファイルをインポートし、いくつかのビルドファイルを持っている:アリ:インポートされたビルドファイルで「インポートに複製プロジェクト名」

base.xml:

<project name="base"> 
    <!-- does not define a 'build' target --> 
</project> 

buildA.xml:

<project name="buildA"> 
    <import file="base.xml" /> 
    <target name="build"> 
     <ant antfile="buildB.xml" target="build" 
      inheritall="false" inheritrefs="false" /> 
    </target> 
</project> 

buildB.xml:

<project name="buildB"> 
    <import file="base.xml" /> 
    <target name="build"> 
     ...snip... 
    </target> 
</project> 

は(モジュールAがモジュールBに依存)

次に、buildA.xmlからBのbuildターゲットの上記呼び出しは次のエラーを与える:

Duplicated project name in import. Project base defined first in buildA.xml and again in buildB.xml

以来buildA.xmlbuildB.xmlは同じものを継承しますbase.xml、これは避けられないようです。

どうすればこのエラーを取り除くことができますか?

+1

ant 1.8.2で再現できません。 'ant -f buildA.xml build'でエラーはありません。 – sudocode

+0

Dang。私はテストケースの例を単純化したようです。そのために残念!再現するには、3つのファイルを2つの異なるディレクトリに複製し、次にdir1の_buildA_をdir2の_buildB_にコールする必要があります。私はそれに応じて私の質問を編集します。 –

+0

編集しませんでしたが、下記のソリューションを投稿しました。ありがとうございました。私はあなたの答えとコメントをアップしました。 :-) –

答えて

2

、私は問題を解決しました。 base.xmlへの絶対パスはどちらの場合も異なるため、Antはそれを同じファイルとして認識しません。 inheritAllfalseに設定されていても、呼び出し元のタスクのコンテキストは保持され、名前の衝突が発生します。

これを解決するにはname属性をbase.xmlから省略できます。 Ant 1.8以来、importタスクには属性asがあります。これは、ベースプロジェクトが名前のない場合にベースターゲットを参照するために使用できます。ターゲットをオーバーライドしない場合は、importの代わりにincludeを使用できます。私は1.7になっているので、それは私を助けません。

以前のバージョンのAntの場合は、execコールを経由してAntコンテキストが完全に増殖するのを防ぐことができます(次に2つのAntインスタンスが実行されます)。さらに良い方法は、正確に同じをインポートする方法を見つけることです。xml(両方とも同じ絶対パスで)。

1

Ant 1.6を使用していますか?このresolved Ant bugは同じ問題のようです。

EDIT

私はあなたの最近のコメントに参照ディレクトリ構造を再現してみました。

./base.xml 
./buildA 
./buildA/buildA.xml 
./buildB 
./buildB/buildB.xml 

それに応じて、ビルドファイルを修正しました。

<project name="buildA"> 
<import file="../base.xml"/> 
<target name="build"> 
    <ant antfile="../buildB/buildB.xml" target="build" inheritall="false" inheritrefs="false"/> 
</target> 
</project> 

私はまだアリ1.8.2または1.7.1で、次のために何のビルドエラーを取得していない:sudocodeの答えに基づいて

ant -f buildA/buildA.xml build 
+0

私はAnt 1.7.1を使用していますが、それはやや異なる問題です。しかし、私の考えでは、_base.xml_でプロジェクト名を省略できると思っていました。私は明日それを試し、結果を掲載します。 –

+0

ええ、_base.xml_を含め、3つのファイルをすべてコピーする必要があります。私は今それを得たと思う(答えとして掲示)。これを手伝ってくれてありがとう! –

+0

あなたは歓迎ですが、「3つのファイルすべてをコピーする必要があります」という意味を理解していません。単一の場所で単一のbase.xmlを使用せず、複数のファイルでそれを参照していますか?もしそうなら、私は上に示したように動作します。 – sudocode

関連する問題