2017-12-22 15 views
1

私はANTビルドを展開プロセスに使用しています。そのために、私は、以下の点、 'initiate.deploy' という名前のANTにおける5つのターゲット( 展開を開始するために)、 'svn.checkout'( ワークスペースにSVNからチェックアウトソース)を作成しANTビルドで複数ターゲットの 'depends'プロパティで1つのターゲットを使用するには?

  1. を追いました'generate.ear'(EAR生成)および 'deploy.ear' (EARをサーバーにデプロイ)、 'clean.workspace'(クリーニングワークスペース dirtory)。
  2. ターゲット 'initiate.deploy'がデフォルトのターゲットです。
  3. 'svn.checkout'ターゲット の後で 'deploy.ear'ターゲットの後にワークスペースディレクトリをクリーニングする必要があります。
  4. 'svn.checkout'ターゲットと 'initiate.deploy'ターゲットの 'depends'プロパティに 'clean.workspace'ターゲットを配置しました。

マイコード:

<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear, clean.workspace"> 
     .......................... 
    </target> 

    <target name="svn.checkout" description="SVN checkout" depends ="clean.workspace"> 
     .......................... 
    </target> 

しかし、ターゲットのclean.workspaceが ' 'svn.checkout' ではなく、後の 'deploy.ear' ターゲットの前に一度だけ実行されます。

ビルドシーケンスは次のように作成されます。標的に対する

ビルド配列(複数可) 'initiate.deploy'、[clean.workspace、 svn.checkout、check.workSpace、update.property.file、generate.ear、 deploy.ear INITIATEあります。デプロイ]

ANTビルドで複数のターゲットの 'depends'プロパティで1つのターゲットを使用する方法は?

答えて

0

としてはAnt documentationで説明:

を、上記 Dとして与えられた目標からのバックストレッチ依存性の連鎖において、各ターゲットは、複数の ターゲットがそれに依存する場合であっても、一度だけ実行されます。

これは依存グラフのサイクルを避けるためのものです。

<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear"> 
    .......................... 
    <antcall target="clean.workspace" /> 
</target> 

<target name="svn.checkout" description="SVN checkout" depends ="clean.workspace"> 
    .......................... 
</target> 

更新:

としてこれに、あなたはantcallタスクを経由して明示的にinitiate.deployの依存関係からclean.workspaceを削除し、それを呼び出すことによって、たとえば、あなたの目標を変更する必要が原因

コメントに記載されているように、antcallタスクは新しいAntプロジェクトで呼び出されたターゲットを開始し、望ましくないオーバーヘッドを作成する可能性があります。この動作を回避するには、ターゲットをmacrodefとしてラップし、それを他のターゲットのタスクとして呼び出すことができます。その後、他のタスクの依存関係として、それが利用可能に維持するためには、それが新しいmacrodefを呼び出すように呼び出されたターゲットを変更することがあります。説明のための

<target name="initiate.deploy" description="Initiate deployment" depends="svn.checkout, generate.ear, deploy.ear"> 
    .......................... 
    <clean.workspace.macro /> 
</target> 

<target name="svn.checkout" description="SVN checkout" depends ="clean.workspace"> 
    .......................... 
</target> 

<target name="clean.workspace"> 
    <clean.workspace.macro /> 
</target> 

<macrodef name="clean.workspace.macro"> 
    <sequential> 
     <!-- do the workspace cleanup --> 
     .......................... 
    </sequential> 
</macrodef> 
+0

感謝を。非常に明確です。しかし、antcallを使用すると、Antビルドの新しいインスタンスが開始されます。そうですか? – AJK

+0

@AJKはい、そうです。呼び出されたターゲットは新しいAntプロジェクトで開始されます。私はこれを反映する答えを更新し、代替案を提案しました – Lolo

+0

ありがとうございます。私がAntに慣れてこなかったので、私はこのことから新しい重要なことを学びました。 – AJK

関連する問題