web-dev-qa-db-ja.com

ローカルリポジトリとリモートリポジトリに異なるタイムスタンプを持つSNAPSHOTSがある場合、MavenはどのようにSNAPSHOT依存関係を解決しますか?

プロジェクトAに依存する開発中のプロジェクトBがあるとします-これも現在開発中で、まだリリースされていません。

したがって、AのPOMファイルには、次のセクションがあります。

<dependency>
  <groupId>com.example</groupId>
  <artifactId>project-b</artifactId>
  <version>1.0.0-SNAPSHOT</version>
<\dependency>

職場では、リモートリポジトリ(Nexus)とCIボックス(Jenkinsを実行)があります。

私の同僚がBに変更を加えてSVNにコミットすると、Jenkinsはその変更を取得してコンパイルし、リモートリポジトリに配置します。その頃、Bをローカルで開き、変更を加えてコンパイルし、ローカルリポジトリにインストールします。

MavenがBを解決しようとすると、mvn clean installAローカルですか?

  • 見つかった場合、常にデフォルトでローカルのSNAPSHOTになりますか?
  • 常にデフォルトでリモートのスナップショットになりますか?
  • タイムスタンプを見ますか?
  • それは何か違うことをしますか?

先日、少し混乱しましたが、基本的にローカルリポジトリを手動で削除して、取得する予定のバージョンを取得する必要がありました。だから私は今本当に起こっていることを理解しようとしています。 (したがって、詳細に記載されているドキュメント内の場所へのリンクがあれば、それも大歓迎です...)ローカルでは、リポジトリフォルダーにいくつかのSNAPSHOTビルドがある場合があります。ファイル名のSNAPSHOT部分の後のタイムスタンプのように見えます...

16
Christian

mvn installだけのアーティファクトはタイムスタンプを取得しません。タイムスタンプは、内部/リモートリポジトリにmvn deployすると適用されます。ローカルのmaven-metadata-local.xmlフォルダーの~/.m2/repository/B/1.0.0-SNAPSHOT/を調べると、次の行が表示されます。

<updated>YYYYMMDDHHMMSS</updated> 

これは、Maven依存関係リゾルバーが最新のスナップショットを決定する方法です。

あなたとあなたの同僚が同じ1秒以内に内部/リモートリポジトリにデプロイする場合、これを処理するかどうかは、リポジトリマネージャー(あなたの場合はNexus)次第です。

ご注意ください:これまでの詳細で説明されているドキュメントページを見たことがないので、上記の段落はMavenでの私の経験に依存しています。参照を見つけるための入力、追加、修正は大歓迎です。

概要については Maven /リポジトリの概要 を参照してください。

最新のスナップショットを使用することを保証する場合:

  • <updatePolicy>settings.xmlを宣言します。

    • updatePolicy:この要素は、更新が発生する頻度を指定します。 Mavenは、ローカルPOMのタイムスタンプ(リポジトリのmaven-metadataファイルに保存されている)をリモートと比較します。選択肢は次のとおりです:alwaysdaily(デフォルト)、interval:X(Xは分単位の整数)またはnever.

    設定リファレンス、リポジトリ を参照してください。

  • -Uを使用する| --update-snapshotsコマンドラインオプション。

    $ mvn -h
    ...
    -U,--update-snapshots    Forces a check for missing
                             releases and updated snapshots on
                             remote repositories
    ...
    

    Maven:The Complete Reference、6.1。Maven Command Line Options、6.1.11。Downloading and Verifying Dependencies も参照してください。

„ファイル名のスナップショット部分の後のタイムスタンプ“は私には珍しいです。 AFAIHSどちらか一方のみです。これは、プロジェクトのPOMの<artifactId>に「-SNAPSHOT」がある場合に発生する可能性があります。

更新

以下も参照してください。