2009-07-21 5 views
7

私は、複数のビルド間で再利用されるいくつかの一般的なナントターゲットを保持する一般的なcommon.xmlファイルを持っています。私がしたいことは、これらのターゲットのうちのいくつかを「オーバーライド」し、既存のターゲットが実行される前または後に追加のステップを含めることです。含まれているビルドファイルからナントターゲットを上書きすることはできますか?

現在のファイルから最初にナルターゲットを使用していますか?すなわち、インクルードされたファイルのターゲットと同じ名前の現在のビルドファイルにナントターゲットを作成すると、それが呼び出され、インクルードされたものが無視されますか?その場合、私はちょうど含まれているターゲットを呼び出して呼び出すことができますが、そのように見えるのは、含まれているタスクではなく再帰的な呼び出しになります。

思考?

答えて

2

いいえ、似たようなセットアップをしていますので、私はcommonFile.buildで使用するすべてのビルドターゲットを持っています。そして、次のコードを使用してください...私のnewFile.buildで

<include buildfile="../commonFile.build"/> 

に(つまり、ファイルの先頭にcommonFile.buildを含みます)、それはcommonFileに存在するように、私は、「ビルド」と呼ばれる新しいターゲットを追加し、ここにありますBUILD FAILEDが

あなたが応答に入るエラーメッセージ...

「build」という名前の重複したターゲット!

いいアイデア、おそらくオブジェクト指向の原則ですが、残念ながらうまくいきません。

いいですか?

3

私は、同じ質問を持っていた(と同じ結果を見つけました)、私はまた、回避策を見つけました。私は例を挙げて説明することができます。

あなたはProjectFile.buildとCommonFile.buildを持っています。たとえば、 "Clean"という名前のターゲットを上書きしたいとします。

あなたは新しいファイル(それを呼び出すをCommonFile_Clean.build)を作成する必要があります

含まれている:ProjectFileで

<?xml version="1.0"?> 
<project> 
    <echo message="checking Clean definition..." /> 
    <if test="${not target::exists('Clean')}"> 
      <echo message="Clean target not defined." /> 
     <include buildfile="CommonFile_Clean.build" />  
    </if> 
</project> 

:CommonFile.buildで

<?xml version="1.0"?> 
<project> 
    <target name="Clean"> 
     <echo message="Do clean stuff here" /> 
    </target> 
</project> 

を、あなたは条件付きでCommonFile_Clean.buildを含めます.buildの場合、Cleanターゲット(CommonFile_Clean.buildは使用されません)を定義するか、CommonFile_Clean.buildで定義されているデフォルトの実装を使用します。もちろん

あなたが多数のターゲットを持っている場合、これは仕事のかなりのビットになります。

希望に役立ちます。

関連する問題