プロジェクト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 install
A
ローカルですか?
先日、少し混乱しましたが、基本的にローカルリポジトリを手動で削除して、取得する予定のバージョンを取得する必要がありました。だから私は今本当に起こっていることを理解しようとしています。 (したがって、詳細に記載されているドキュメント内の場所へのリンクがあれば、それも大歓迎です...)ローカルでは、リポジトリフォルダーにいくつかのSNAPSHOTビルドがある場合があります。ファイル名のSNAPSHOT
部分の後のタイムスタンプのように見えます...
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ファイルに保存されている)をリモートと比較します。選択肢は次のとおりです:
always
、daily
(デフォルト)、interval:X
(Xは分単位の整数)またはnever.
設定リファレンス、リポジトリ を参照してください。
-U
を使用する| --update-snapshots
コマンドラインオプション。
$ mvn -h ... -U,--update-snapshots Forces a check for missing releases and updated snapshots on remote repositories ...
„ファイル名のスナップショット部分の後のタイムスタンプ“は私には珍しいです。 AFAIHSどちらか一方のみです。これは、プロジェクトのPOMの<artifactId>
に「-SNAPSHOT」がある場合に発生する可能性があります。
以下も参照してください。
このドキュメントは、Maven 2.0 alpha 1を対象としています。これは、履歴参照のみを目的としており、更新されてMavenドキュメントに統合されています。
しかし、これが統合されている最新のドキュメントはこれまで見つかりませんでした。