2011-12-06 7 views
4

ファイルのセットを任意のターゲット外のディレクトリにコピーする基本的なantスクリプトがあります。依存関係に関係なく、すべてのターゲットが実行された後にこれらのファイルをクリーンアップしたいと思います。私が持っている主な問題は、ターゲットが 'compile'または 'deploywar'になる可能性があるため、 'deploywar'が次に呼び出される可能性があるため、 'cleanUp'ターゲットを 'compile'から盲目的に呼び出すことはできません。そして、呼び出されない可能性があるので、私は盲目的に 'deploywar'から呼び出すことはできません。他のすべての必要なターゲットが完了した後に呼び出されるターゲットを定義するにはどうしたらいいですか?依存関係にかかわらず最終的なantターゲットを強制的に実行する方法

<project name="proto" basedir=".." default="deploywar"> 
... 
<copy todir="${web.dir}/WEB-INF/lib"> 
    <fileset dir="${web.dir}/WEB-INF/lib/common"/> 
</copy> 
<target name="compile"> 
    <!-- Uses ${web.dir}/WEB-INF/lib --> 
    .... 
</target> 

<target name="clean" description="Clean output directories"> 
    <!-- Does not use ${web.dir}/WEB-INF/lib --> 
    .... 
</target> 

<target name="deploywar" depends="compile"> 
    <!-- Uses ${web.dir}/WEB-INF/lib --> 
    .... 
</target> 

<target name="cleanUpLib"> 
    <!-- Clean up temporary lib files. --> 
    <delete> 
     <fileset dir="${web.dir}/WEB-INF/lib"> 
      <include name="*.jar"/> 
     </fileset> 
    </delete> 
</target> 

答えて

2

を関係なく、依存関係のビルドリスナーを使用したり、いくつか/すべての後にすべてのターゲットを対象に実行するには:以下「cleanUpLib」ターゲットは、私はすべて/任意のタスクを実行した後に呼ばれているしたいターゲットであります詳細は参照のために、キャッチ/最後にパターン/試してみてください。

2

ビルドリスナーソリューションRebseが指し示しているのは便利です(+1)。

あなたは「過負荷」あなたの目標、このようなものになります検討することもでき、代替:

<project default="compile"> 

    <target name="compile" depends="-compile, cleanUpLib" 
     description="compile and cleanup"/> 

    <target name="-compile"> 
     <!-- 
      your original compile target 
     --> 
    </target> 

    <target name="deploywar" depends="-deploywar, cleanUpLib" 
     description="deploywar and cleanup"/> 

    <target name="-deploywar"> 
     <!-- 
      your original deploywar target 
     --> 
    </target> 

    <target name="cleanUpLib"> 
    </target> 

</project> 

あなたは本当にオーバーロードすることができ、もちろん、単一のAntビルドファイルで、そのターゲット名でなければなりません異なる。

(私はターゲットを "プライベート"にするためのハックである上記の " - "プレフィックスを使用しました - つまり、シェルスクリプトのarg処理のためにコマンドラインからそれらを呼び出すことはできません。それらをAntで正常にダブルクリックします)。

+0

動作しません。 -compileまたは-deploywarが例外で失敗した場合、cleanUpLibは決して実行されません。 – rreyes1979

関連する問題