1. ホーム
  2. java

[解決済み] Mavenに最新バージョンの依存関係を使用するように指示するにはどうすればよいですか?

2022-03-19 06:40:06

質問

Mavenでは、依存関係は通常このように設定されます。

<dependency>
  <groupId>wonderful-inc</groupId>
  <artifactId>dream-library</artifactId>
  <version>1.2.3</version>
</dependency>

さて、頻繁にリリースされるライブラリを扱う場合、常に <version> タグを更新するのは、やや煩わしいことです。Mavenに、常に(リポジトリから)利用可能な最新バージョンを使用するように指示する方法はありますか?

解決方法は?

注意

記載されている LATESTRELEASE メタバース は削除されました プラグイン依存の場合 は、Maven 3 で "再現可能なビルドのために"。 6年以上前のことです。 (通常の依存関係については、今でも全く問題なく動作します)。 プラグインの依存性については、こちらを参照してください。 Maven3対応ソリューション .


常に最新バージョンを使用したい場合、Mavenにはバージョン範囲の代わりとして使用できる2つのキーワードがあります。これらのオプションは、使用しているプラグイン/依存関係をもはや制御できないので、注意して使用する必要があります。

<ブロッククオート

プラグインや依存関係にあるものを利用する場合、LATESTまたはRELEASEというバージョン値を使用することができます。LATEST は、特定のアーティファクトの最新のリリース版またはスナップショット版、特定のリポジトリに最も最近デプロイされたアーティファクトを指します。RELEASE は、リポジトリ内の最後の非スナップショットリリースを指します。一般に、特定のバージョンでないアーティファクトに依存するソフトウェアを設計することは、ベストプラクティスではありません。ソフトウェアを開発している場合、サードパーティ製ライブラリの新しいリリースが出たときにバージョン番号を更新する必要がないように、便宜上RELEASEまたはLATESTを使用するとよいでしょう。ソフトウェアをリリースする際には、自分のプロジェクトが特定のバージョンに依存していることを常に確認し、自分の管理下にないソフトウェアのリリースによって、ビルドやプロジェクトが影響を受ける可能性を減らす必要があります。LATESTとRELEASEは、なるべくなら慎重に使用してください。

をご覧ください。 MavenブックのPOMシンタックスセクション をご覧ください。または、以下のドキュメントを参照してください。 依存関係のバージョン範囲 である。

  • 角括弧( [ &です。 ] は閉じた状態(含む)を意味する。)
  • 括弧( ( &です。 ) ) は、quot;open" (排他的) を意味します。

以下に、さまざまなオプションを説明する例を示します。Maven リポジトリでは、com.foo:my-foo は次のようなメタデータを持ちます。

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>com.foo</groupId>
  <artifactId>my-foo</artifactId>
  <version>2.0.0</version>
  <versioning>
    <release>1.1.1</release>
    <versions>
      <version>1.0</version>
      <version>1.0.1</version>
      <version>1.1</version>
      <version>1.1.1</version>
      <version>2.0.0</version>
    </versions>
    <lastUpdated>20090722140000</lastUpdated>
  </versioning>
</metadata>

そのアーティファクトへの依存が必要な場合、以下のオプションがあります(他の バージョン範囲 はもちろん指定できますが、ここでは関連するものを示しているだけです)。

正確なバージョンを宣言する(常に1.0.1に解決される)。

<version>[1.0.1]</version>

明示的なバージョンを宣言します(衝突が発生しない限り、常に1.0.1に解決され、その場合Mavenは一致するバージョンを選択します)。

<version>1.0.1</version>

すべての 1.x のバージョン範囲を宣言する (現在は 1.1.1 に解決される)。

<version>[1.0.0,2.0.0)</version>

バージョン範囲をオープンにする(2.0.0に解決される)。

<version>[1.0.0,)</version>

バージョンをLATESTと宣言する(2.0.0に解決する)(maven 3.xから削除されました。)

<version>LATEST</version>

バージョンを RELEASE (1.1.1 に解決する) と宣言します (maven 3.x から削除)。

<version>RELEASE</version>

デフォルトでは、独自のデプロイは Maven メタデータの "latest" エントリを更新しますが、"release" エントリを更新するには、"release-profile" を MavenスーパーPOM . これは "-Prelease-profile" または "-DperformRelease=true" のいずれかで行うことができます。


Mavenが依存関係のバージョン(LATEST、RELEASE、およびバージョン範囲)を選択できるようにするすべてのアプローチは、後のバージョンが異なる動作をする可能性があるため、ビルド時間の問題の可能性があることを強調する価値があります(たとえば、依存関係プラグインは以前にデフォルト値を真から偽に切り替え、混乱した結果をもたらしました)。

したがって、一般に、リリースにおいて正確なバージョンを定義することは良いアイデアです。例えば ティムからの回答 が指摘するように maven-versions-plugin(メイヴン・バージョンズ・プラグイン は依存関係のバージョンを更新するのに便利なツールで、特に バージョン:use-latest-versions バージョン:最新のリリースを使用する の目標を設定します。