0

ANT を使用してソース コードを EAR にビルドするプロジェクトを扱っています。数年にわたるプロジェクトは巨大なサイズに成長し、50 以上のモジュールがあり、驚くことではありませんが、ソース コードをビルドするのに 2 時間かかります。

私が下した明白な決定は、これを EAR のサブモジュール間の依存関係管理に IVY を使用するモジュラー ビルドに移行することでした。そのため、変更されたモジュールのみをビルドし、毎回新しい EAR をパッケージ化します。これらのサブモジュール間の依存関係を把握する良い方法を見つけようとして立ち往生しています。サードパーティの依存関係は簡単にクラックできることに注意してください。これらのサブモジュールの lib フォルダーにあるすべてのものを IVY に移動するだけです。しかし、前者は私が立ち往生しているところです。これは彼らがすることです:

  1. ソースをすべてのモジュールからディレクトリにコピーします
  2. 「すべて」を global.jar にコンパイルします
  3. この global.jar をクラスパスに追加します
  4. その後、個々のモジュールをすべてビルドします

たとえば、モジュール C はモジュール A と B に依存しているため、A と B は前者の ivy 依存関係として移動する必要があることをどのように把握できますか? 1 つの方法は、Eclipse で一度に 1 つのモジュールを追加してビルドを試行し、クラスの欠落による失敗を排除することです。しかし、これよりも良い方法が必要です。それを理解するために、次の1か月の人生を過ごすことは想像できません:)

4

1 に答える 1

0

まず、ivy リポジトリを作成する必要があります。やり方がわかりません。アイビーのサイトで探してみてください。その後、作成build.xmlしてivy.xmlファイルする必要があります。

依存する製品をビルドする build.xml の例module1

<project name="ivy.test" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="resolve">
        <!-- this line tells ivy to use ${ivy.settings.file} where are ivy repositories; more info http://ant.apache.org/ivy/history/latest-milestone/settings.html -->
        <ivy:configure file="${ivy.settings.file}"/>
        <!-- resolve ivy dependencies from ivy.xml and put them in ivy cache dir -->
        <ivy:resolve file="${build.dir}/ivy.xml" transitive="false" />
        <!-- finally copy resolved dependencies to ${ivy.lib.dir} -->
        <ivy:retrieve conf="default" pattern="${ivy.lib.dir}/[artifact].[ext]" />
    </target>

</project>

module1依存関係を解決するために使用される ivy.xml の例 ( ivysettings ファイルで定義された ivy リポジトリの 1 つを見つけようとします)

<ivy-module version="2.0">
    <info organisation="your.organisation" module="modulename">
        <ivyauthor name="yourname" />
    </info>
    <configurations>
        <conf name="default" description="default conf" />
    </configurations>
    <dependencies>
        <dependency name="module1" org="your.organisation" rev="latest.release" conf="default->default" />
    </dependencies>
</ivy-module>

プロジェクトで使用される ivy.xml の例module1(このプロジェクトは に依存しmodule2module3リポジトリmodule1にも公開されています)

<ivy-module version="2.0">
    <info organisation="your.organisation" module="module1"> <!-- module name is used in dependency -->
        <ivyauthor name="yourname"/>
    </info>
    <configurations>
        <conf name="default" description="default configuration"/>
    </configurations>
    <publications>
        <artifact name="module" ext="dll" type="dll" conf="default"/>
    </publications>
    <dependencies>
        <dependency name="module2" org="your.organisation" rev="latest.release" conf="default->default" />
        <dependency name="module3" org="your.organisation" rev="latest.release" conf="default->default" />
    </dependencies>
</ivy-module>
于 2013-04-16T08:02:02.703 に答える