0

アプリケーションをデプロイするためのANTビルドプロセスを自動化したい。

フォルダー内のbuild.xmlファイルを繰り返し検索して実行するANTスクリプトを作成したいのですが、サブビルドが失敗した場合は、ログを書き込んでスキップして他のスクリプトに進む必要があります。役立つアイデアやサンプルを投稿してください。

ルートフォルダ
    |
    | -----Folder1
    | |
    | | --SubFolder1
    | | build.xml
    | | --SubFolder2
    | | build.xml
    | -----Folder2
    | build.xml
    |
    | -----Folder3
             build.xml
4

2 に答える 2

1

subantタスクを使用することをお勧めします

<project name="Subant demo" default="deploy-everything">
    <target name="deploy-everything">
        <subant>
            <fileset dir="." includes="**/build.xml" excludes="build.xml"/>
            <target name="clean"/>
            <target name="deploy"/>
        </subant>
    </target>
</project>

これにより、すべての「build.xml」ファイルが検索され、それぞれで「cleandeploy」ターゲットが呼び出されます。

サブフォルダーのビルドを自動的に取得するのは良いことですが、ビルドが互いに独立していない限り、大規模なプロジェクトで機能することはめったにありません(ビルドの順序が重要です)。

次の例では、順序付けされていないファイルセットではなく、明示的なファイルリストを使用しています。

<project name="Subant demo" default="deploy-everything">
    <target name="deploy-everything">
        <subant>
            <filelist dir=".">
                <file name="Folder1/SubFolder1/build.xml"/>
                <file name="Folder1/SubFolder2/build.xml"/>
                ..
            </filelist>
            <target name="clean"/>
            <target name="build"/>
        </subant>
    </target>
</project>

最後に、最も高度なソリューションは、ivyなどの依存関係マネージャーを使用して、各モジュールの依存関係を「ivy.xml」ファイルで宣言することです。適切にセットアップすると、各サブモジュールのビルドがよりスタンドアロンになります。ビルドの「すべてが問題になる」を解決するために、ivyは正しいビルド順序を自動的に決定できるビルドリストタスクを提供します。

<target name="deploy-everything">
    <ivy:buildlist reference="build-path">
        <fileset dir="." includes="**/build.xml" excludes="build.xml"/>
    </ivy:buildlist>

    <subant buildpathref="build-path">
        <target name="clean"/>
        <target name="build"/>
    </subant>
</target>
于 2012-12-09T10:45:39.413 に答える
0

私は私の問題を解決しました、返信をありがとうございました、私は状況を処理するために以下のテクニックを使用しました。

<?xml version="1.0" ?> 
<project name="MasterBuildPrj" default="MasterBuild">
    <macrodef name="iterate">
        <attribute name="target"/>
        <sequential>
            <subant target="@{target}">
                <fileset dir="." 
                         includes="**/build.xml"
                         excludes="build.xml"/>
            </subant>
        </sequential>
    </macrodef>
    <target name="MasterBuild"  description="Build all sub projects">
        <iterate target="build"/>
    </target>

    <target name="clean"  description="Clean all sub projects">
        <iterate target="clean"/>
    </target>   
</project>
于 2012-12-09T12:00:03.510 に答える