2009-04-14 15 views
2

私たちはそれぞれのサブプロジェクトに1つのAntスクリプトを用意しています。最後に、マスタービルドスクリプトからこれらのすべてを実行し、プロジェクト全体をパッケージ化するためにいくつかのハウスクリーニングを行いたいとします。各Antスクリプトの名前はant.xmlで、そのプロジェクトのサブディレクトリにあります。それぞれimportを使用してant-commons.xmlをインポートし、そこにある特定のターゲットの一部を上書きします。Antマスタービルドファイルが正常に動作しないのはなぜですか?

例えば、プロジェクトの一つは適切classpathを設定するために、このすべて、理論的には、今

(ANT-コモンズ1.4を使用して)1.5にsourcetargetを設定するために、compileターゲットをオーバーライド簡単に聞こえます。

最初のいくつかのサブプロジェクトが正常に動作:実際に何が起こる

<project name="Retain" basedir="." default="main"> 
    <target name="main"> 
    <ant dir="SharedJava" antfile="ant.xml" target="clean"/> 
    <ant dir="SharedJava" antfile="ant.xml" target="copy_current"/> 
    <ant dir="GWEasySoap" antfile="ant.xml" target="clean"/> 
    <ant dir="GWEasySoap" antfile="ant.xml" target="copy_current"/> 
    <ant dir="RetainLib" antfile="ant.xml" target="clean"/> 
    <ant dir="RetainLib" antfile="ant.xml" inheritAll="false" target="copy_current"/> 
    <ant dir="RetainIndex" antfile="ant.xml" target="clean"/> 
    <ant dir="RetainIndex" antfile="ant.xml" target="copy_current"/> 
    <ant dir="RetainPersist" antfile="ant.xml" target="clean"/> 
    <ant dir="RetainPersist" antfile="ant.xml" target="copy_current"/> 
    </target> 
</project> 

:ここでは、マスタービルドスクリプトです。実際にはSharedJavaのjarファイルへの参照が必要なRetainLibは、それが見つからない方法について泣き叫ぶことができません。 RetainLibを削除したときに、RetainIndexが失敗しました.1.4のターゲットファイルでジェネリックを使用しないでください。

周りをプレイした後、私はかなり単純に、オーバーライドされたものの代わりにant-commonsのコンパイルターゲットを実行することを主張していました。

なぜですか?どうすればこの問題を回避できますか? (エレガントな私が意味する - 明らかに、私は完全にアリ・コモンズの使用を取り除くことができ、私は物事がうまくいくに違いない。)私は仕事上のinheritAll =「false」を属性を使用することをお勧めし

答えて

1

。表示されている問題は、マスターファイルのbasedirやその他のプロパティがサブプロジェクトの相対パスに問題を引き起こしているという事実に関連しています。

また、サブプロジェクトbasedirsが勝つことを保証するためにdir = ".."属性を失います。

だからこれは私が何をするのかである...

<project name="Retain" basedir="." default="main"> 
    <target name="main"> 
    <ant antfile="SharedJava/ant.xml" target="clean" inheritAll="false"/> 
    <ant antfile="SharedJava/ant.xml" target="copy_current" inheritAll="false"/> 
    <ant antfile="GWEasySoap/ant.xml" target="clean" inheritAll="false"/> 
    <ant antfile="GWEasySoap/ant.xml" target="copy_current" inheritAll="false"/> 
    ... 
    </target> 
</project> 
+0

Nope。ごめんなさい。あなたのアドバイスは、結果から少なくとも間違っています。 1. dirを削除し、inheritFalseを指定すると、呼び出されたant.xmlスクリプトがディレクトリとして混乱するため、ビルドはただちに失敗します。 2。dirが復元されて栄光と正当な場所:)とinheritFalse、正確に説明されているように、ビルドに失敗します。 –

0

すべての呼び出しは、新しいアリインスタンスを開きます。たとえ "SharedJava"がant-commons.xmlでいくつかのオーバーライドを行っても、他のスクリプトはそれを見ません。いくつか継承されているので、ベーススクリプトにant-commons.xmlを含めるようにして、サブスクリプトの値を使用することもできます。非継承値については、パスのような名前付きパラメータのようなものを使用することができます。私は、外部スクリプトのタスクには依存関係が、その呼び出しにパラメータとして表現するものを持たないことを選択し

<ant antfile="${check.build.file}" target="validateXml"> 
    <property name="p.check_dir" location="${project.base.dir}" /> 
    <property name="p.dtd_dir" location="${build.data.dir}" /> 
</ant> 

1

私はこのようなプロジェクトに取り組みました。すべてのアリタスクの出力が配置されたビルドディレクトリを作成したところ、うまくいきました。ビルドファイルの内部で何が起こっているかに関する追加情報がなければ、追加の洞察力を提供することは難しいでしょう

関連する問題