0

私は Ant の初心者です (私は Maven から来ましたが、現時点では Ant は私の悪夢です)。

次のような状況があります。

Eclipse ワークスペースには、最終的な単一のアプリケーションを構成する相互に対話する Java プロジェクトがあります。

アプリケーション GUI を実装するこのプロジェクト ( CrystalIceGUIという名前) の 1 つに、独自のbuild.xml Ant スクリプトが含まれています。

1)すべてのプロジェクトをコンパイルします(CrystalIceGUI プロジェクトの依存関係と見なされます)。

2) プロジェクトごとに、(適切なプロジェクトに) Releaseという名前のディレクトリを作成し、このプロジェクトに関連する.jarファイルをそこに置きます。(たとえば、これらのプロジェクトの 1 つがShellExtBridgeという名前であるため、Ant スクリプトは次のディレクトリを作成します: ShellExtBridge/Releaseおよび作成されたShellExtBridgeの.jarファイルをこのディレクトリに配置します。

3) 最後に、メイン プロジェクト ( CrystalIceGUI ) の次の構造を作成します。 Relaeseという名前のディレクトリをCrystalIceGUIプロジェクトに作成し、このディレクトリにCrystalIceGUI プロジェクトに関連する .jar ファイルを配置します。

さらに、このディレクトリCrystalIceGUI/Release/libを作成します。このディレクトリには、以前に依存プロジェクト用に作成されたすべての.jarが含まれています。

そして今、私の問題: 上司は、プロジェクトごとに 1 つの Ant スクリプトを作成するように私に依頼しました。これらの Ant スクリプトは、各プロジェクトにリリースフォルダーを作成し、プロジェクトの jar を作成して、このリリース フォルダーに jar を配置するだけです。しかし、私はそれをどのように行う必要があるかについて少し混乱しています。

私のアイデアは次のとおりです。プロジェクトごとに、古い Ant スクリプト (メイン プロジェクトのすべての作業を実行するスクリプト) から、現在取り組んでいるプロジェクトに関連するセクションを取得します。

たとえば、ShellExtBridgeという名前の前のサブプロジェクトの場合: 古いbuild.xml ant スクリプトから次のコード セクションを取得します。

<target name="shellextbridge" 
    description="Packs classes of shellextbridge">
    <mkdir dir="${project.libdir}" />
    <javac srcdir="${deps.shellextbridge.dir}/Project/src" destdir="${deps.shellextbridge.dir}/Project/bin"/>
    <jar destfile="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" index="false">
        <fileset dir="${deps.shellextbridge.dir}/Project/bin"/>
        <manifest>
            <attribute name="Created-By" value="${info.software.author}" />
            <attribute name="Main-Class" value="com.techub.crystalice.rmi.Main"/>
        </manifest>
    </jar>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.libdir}/${deps.shellextbridge.jar}"/>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.deploy}/lib/${deps.shellextbridge.jar}"/>
    <copy file="${deps.shellextbridge.dir}/Release/${deps.shellextbridge.jar}" tofile="${project.dev.deploy.dir}/${deps.shellextbridge.jar}"/>
</target>

それを、 ShellExtBridgeプロジェクトに固有の新しいbuild.xml ant スクリプトに入れます (パスを変更します)。

彼らが私に求めたことを実行するための良い解決策はありますか?

住んでたらごめんなさい昨日までアリを見たことがなかったのでどう行動したらいいのか疑問がたくさんあります

TNX

アンドレア

4

2 に答える 2

1

標準的なプロジェクト ソース コード レイアウトに慣れている Maven から来たあなたは、ビルド プラグインにも慣れているでしょう。

まず、ビルド ロジックの共通部分を特定し、一連の ANT マクロ定義を作成することを検討することをお勧めします。次に、ビルドのマクロ定義を保持するANTlibを作成する方法を調べます。これは、各ビルドに含めることができる jar ファイルであり、共通のビルド ロジックを保持します。

最後に、共通ロジックを ANTLIB に保持することを決定した場合、これはビルドのバージョン管理をサポートできることを意味し、Maven がさまざまなバージョンのビルド プラグインをサポートする方法をエミュレートします。古いビルドを壊さずに変更を加える必要がある場合に非常に便利です。

詳細については、次の回答を参照してください。

于 2013-10-08T20:01:13.637 に答える
0

一般的なビルド ロジックの定義に関して。複数のプロジェクトで再利用する。Ant で一般的なビルド フェーズを定義するには、Netbeans がプロジェクトをセットアップする方法を確認することをお勧めします。これにより、build.xml の再利用について十分に理解することができます。

clean、init、build、dist、release (など) の 5 つのフェーズを特定することから始めるとしましょう。基本ファイルを作成できます (おそらく $root.dir/build/common.xml にあります)。このファイルでは、先に進み、ターゲットが呼び出される順序を作成できます。

ここで、Netbeans がプロジェクトをセットアップする方法を見ると、ビルドなどのターゲットがターゲット-pre-build, -do-build, -post-build を呼び出すことに気付くでしょう。事実上、実際のコードはすべて、これらの追加ターゲットに存在します。これを行う利点は、個々のモジュール (この common.xml がインポートされている場所) で、特別な処理が必要なビルドの部分のみをオーバーライドできることです。

このようにして、各プロジェクトをモジュラー ビルド システムに個別に移行できます。

基本的なスクリプトを実行したら、Ivy (依存関係管理) などのライブラリを活用してパッケージ化などを行うことを検討できます。

あるいは、拡張可能なモジュラー システムに移行することを計画している場合は、Gradle を使用することもお勧めします。これは、Ant フレンドリーな Java ベースのビルド プラットフォームです。私がそれを提案する理由は、最終的には、小さな要件を満たすためだけにカスタム タスクを作成したり、大量のジャグラーを実行したりすることになるためです。スクリプト コードを使用すると、おそらくより適切に実行できるはずです。

これがお役に立てば幸いです。

于 2013-10-08T20:16:55.053 に答える