2

latest.integrationがどのように機能するかを理解するのに問題があります。

http://ant.apache.org/ivy/history/latest-milestone/tutorial/defaultconf.htmlに記載されている出力を提供していない例があります。

つまり、公開の時間に関係なく、ローカルリゾルバーは他のリゾルバーよりも優先されます。

私のivysettings.xmlは次のようになります。

<resolvers>
<chain name="download-chain" returnFirst="false" >
    <url name="nexus-repo" m2compatible="true" >
        <artifact pattern="${nexus}/[organization]/[module]/[revision]/[type]s/[artifact](-[classifier]).[ext]" />
        <ivy pattern="${nexus}/[organisation]/[module]/[revision]/[type]s/[artifact].[ext]" />
    </url>
    <resolver ref="local" />
</chain>
</resolvers>

ここで、ネクサスURLリポジトリとデフォルトのローカルへの参照があることを宣言します。依存関係を解決したいときにこのチェーンを使用します。

指定されたアーティファクトを作成し、最初にローカルリゾルバーを使用して、ステータスが「integration」でリビジョンが「HEAD」(SNAPSHOTのようなもの)でローカルに公開します。

<ivy:publish 
    overwrite="yes"
    update="true"
    artifactspattern="${project.dist.dir}/[artifact]-[revision](-[classifier]).[ext]" 
    resolver="local"
    settingsRef="ivy.nexus"
/>

もう一度再構築して、nexusリポジトリに公開します。

<ivy:publish 
    overwrite="yes"
    update="true"
    artifactspattern="${project.dist.dir}/[artifact]-[revision](-[classifier]).[ext]" 
    resolver="publish-url"
    forcedeliver="true"
    settingsRef="ivy.nexus"
/>

以前のアーティファクトをリビジョン「latest.integration」の依存関係として宣言する別のプロジェクトがあります。

宣言されたリゾルバーの順序に関係なく、アーティファクトはローカルリポジトリからダウンロードする必要があると思います。しかし、そうではありません。ダウンロードされたアーティファクトは、常に最初に言及されたリゾルバーのものです。「ローカル」リゾルバーの名前を変更しても、何の影響もありませんでした。順序は常に重要です。

依存関係にchangeing="true"を追加してみました。それは役に立たなかった。

この質問の内容: アイビー:依存関係のためにローカルスナップショットを強制する

Askerは、さらに異なる動作、つまり最新のものが取得されることについて言及しています(リゾルバーの順序は重要ではありません)。

それで、それをまとめて、延長して申し訳ありません:アーティファクトを取得する方法:

1)場所に関係なく、常にlatest.integration(最新)。

2)他の場所に最新の統合バージョンがある場合でも、常にローカルから。

3)私は無知ですか?

4

2 に答える 2

1

Nexusへのアーティファクトの公開に関する次の回答を読むことをお勧めします

ivyとnexusを使用してサードパーティのアーティファクトを公開する方法

ibiblioリゾルバーを使用すると、はるかに簡単になります。

2つ目のアドバイスは、ANTロジック内で、統合ビルドとリリースビルドを明確に分離することです。前者はリビジョンとしてタイムスタンプを使用できますが、後者は増分リビジョン番号を維持するための戦略を持っている必要があります(これはまったく別の質問です)。Mavenは、これらを「SNAPSHOT」または「Release」と呼び、それらをサポートするために2つの異なるタイプのリポジトリーをビルドおよび実装します。

最後のアドバイスは、統合ビルドを保存する場所でない限り、ローカルリポジトリの使用を避けることです。Ivyは、ダウンロードされたアーティファクトのローカルキャッシュを維持します。努力したり、ローカルリポジトリを維持したりする価値はほとんどありません。

于 2012-06-15T15:54:53.630 に答える
0

結局、注文を無意味にすることができました。

どこまで行けばいいのかわかりませんが:

チェーンリゾルバーとURLリゾルバーでlatest="latest-time"を使用しました。ただし、これでは不十分であり、コードをデバッグしたところ、各リゾルバーが独自の「最新」で判断されていることがわかりました。だから私はこのようにローカルリポジトリを上書きしました:

<filesystem name="local" latest="latest-time" > 
    <ivy pattern="${ivy.local.default.root}/${ivy.local.default.ivy.pattern}"/>
    <artifact pattern="${ivy.local.default.root}/${ivy.local.default.artifact.pattern}"/>
</filesystem>
于 2012-06-19T17:41:16.923 に答える