0

トップレベルのマクロから ANT ターゲットを生成する可能性を探していました。

詳細:

ヘテロジェニック ビルド システムがあります。ANT+IVY は最上位として使用されます (継承されたソリューション、変更できません)。一部のプロジェクトは MSBuild を介してビルドされ、実行タスクを介して ANT から呼び出されます。これらのプロジェクトごとに、msbuild への少なくとも 2 つの異なる呼び出し (簡潔にするためにマクロでラップされています) があり、1 つは "ビルド" ターゲットに、もう 1 つは "クリーン" ターゲットにあります。そのうちの 2 つは、「ターゲット」パラメーターのみが異なります。だから私は、次のような可能性があるかどうかを推測していました:

拡張ノード:

<extensionpoint name="build-ext-point" />
<extensionpoint name="clean-ext-point" />
<target name="build" depends="build-ext-point" />
<target name="clean" depends="clean-ext-point" />

私の魔法のマクロ:

<macrodef name="msbuild-proj" />
    <attribute name="project" />
    <sequential>
        <target name="@{project}-build" >
            <msbuild project="@{project}" target="Build" />
        </target>
        <target name="@{project}-clean" >
            <msbuild project="@{project}" target="Clean" />
        </target>
    </sequential>
</macrodef>

使用方法:

<msbuild-proj project="CPP-proj" />

ありがとう!

PS: ええ、オーバーライドされたビルドとクリーンを定義したり、ext ポイントなどを介して定義したりできることはわかっています。問題は、コードの重複を削除できるかどうかです。

UPD:私はこれに自分で答えます。現時点では、その可能性はありません。主に、Target クラスはタスク コンテナーですが、タスクではないためです。そのため、コンテナに入れることはできません。だから私はある種の拡張可能なタスクを書くと思います。

4

2 に答える 2

1

ANTには、モジュラービルドを構築するためのメカニズムがいくつかあります。

まず第一に、あなたの主な質問は、ビルドに「拡張ポイント」を構築する方法についてだったと思いますか?次のANTタスクは、別のビルドファイルから一般的なビルドロジックをインポートするように設計されています。

すでにmacrodefを使用してビルドを拡張することを計画しているので、これらを再利用可能なANTlibとしてパッケージ化することをお勧めします。ANTlibはプロジェクト内に存在できますが、実際には、別のビルドが取得できるjarファイル内にパッケージ化されるように設計されています。たとえば、標準のANTlibディレクトリにインストールします。

  • $ ANT_HOME / lib
  • $ HOME / .ant / lib

最後に、すでにivyを使用していて、taskdefをANT libとしてパッケージ化する場合は、NexusなどのMavenリポジトリマネージャーにインストールすることでビルドロジックをバージョン管理できます。これは、大規模なANTビルドの重要な問題の1つに対処します。時間の経過とともに、それらは非常に大きくなり、古いビルドに影響を与えずに共通ロジックを変更することは不可能になります(ビルドが互いに適切に分離されていないことを示しています)。

于 2012-11-02T12:47:38.147 に答える
0

実際にこれを行いました。いくつかの注意事項がありますが、その仕事をします。興味のある方: https://bitbucket.org/targetsan/ant-events

于 2012-11-28T10:44:45.187 に答える