3

与えられた:

  • Hudson/Ant を使用したビルド。
  • Ivy キャッシュのタイムアウトは 5 分に設定されています。
  • Ivy リポジトリには、Project A バージョン 2.2.2 と Project B バージョン 1.1.1 が含まれています。
  • プロジェクト B はプロジェクト A に依存しています。

イベント:

  1. プロジェクト A に対して API の変更が行われます。
  2. 関連する変更がプロジェクト B に加えられます。
  3. プロジェクト A バージョン 2.2.3 がビルドされ、リポジトリに公開されます。
  4. 5 分以内に、プロジェクト B バージョン 1.1.2 がビルドされます。
  5. プロジェクト B は失敗し、Ivy Cache からプロジェクト A バージョン 2.2.2 を引き続きプルします。
  6. 5 分後、プロジェクト A バージョン 2.2.3 でプロジェクト B が正しくビルドされます。

私は見ましたが、明らかな解決策が見当たりません(キャッシュしないことを除いて?)。ローカル キャッシュとリポジトリを更新する公開設定はありますか? 両方に明示的に発行する必要がありますか?

4

3 に答える 3

0

キャッシュしないことに似た (しかしそれほど悪くはない) 解決策の 1 つは、次の ivy プロパティを設定して、キャッシュ内に存在する時間を短縮することです。

ivy.cache.ttl.default                 = 30s

今のところ、それで問題が解決するかもしれません。ただし、キャッシュしないよりもはるかに優れているわけではありません。

頭のてっぺんから、キャッシュをオフにしてから、キャッシュを指すアイビー設定ファイルにファイルシステムリゾルバーを作成し、それをチェーンの下位に配置することにより、キャッシュを手動で再実装することを試みるかもしれません。それは次のようになります。

<ivysettings>
    <settings defaultResolver="all-repositories" />
    <include file="ivysettings-common.xml" />
    <resolvers>
        <chain name="all-repositories" returnFirst="true" >
            ...
            <ibiblio name="ibiblio" m2compatible="true" />
            <filesystem name="manual-cache">
                <ivy pattern="${ivy.default.ivy.user.dir}/cache/${ivy.local.default.ivy.pattern}" />
                <artifact pattern="${ivy.default.ivy.user.dir}/cache/${ivy.local.default.artifact.pattern}" />
            </filesystem>
            ...
        </chain>    
    </resolvers>
</ivysettings>

注: ivy.default.ivy.user.dirivy.local.default.ivy.patternおよびivy.local.default.artifact.patternは、デフォルトで設定される組み込みプロパティです。この例ではそれらを参照していますが、それらを設定するために特別な努力をする必要はありません (既に適切なデフォルト値が含まれています)。

これらのアプローチのいずれかが問題に対処できることを願っています。現時点で考えられる解決策は、これら 2 つだけです。

于 2011-03-15T14:47:15.727 に答える
0

憶測: A と B が同じマシンでビルドされている場合、A のビルドの最後に <ivy:resolve refresh="true"> を実行すると、キャッシュが更新されますか? もちろん、A と B が別々のマシンでビルドする場合、それは役に立ちません...

于 2011-01-29T05:17:59.063 に答える