Maven に依存関係の最新バージョンを使用するように指示するにはどうすればよいですか? 質問する

Maven に依存関係の最新バージョンを使用するように指示するにはどうすればよいですか? 質問する

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

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

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

ベストアンサー1

注記:

言及されLATESTRELEASEメタバージョンMaven 3では「再現可能なビルドのため」プラグインの依存関係が削除されました。、6年以上前に作成されました。(通常の依存関係では今でも問題なく動作します。)プラグインの依存関係については、こちらを参照してください。Maven 3準拠ソリューション


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

プラグインまたは依存関係に依存する場合は、バージョン値として LATEST または RELEASE を使用できます。LATEST は、特定の成果物の最新リリースまたはスナップショット バージョン、つまり特定のリポジトリに最近デプロイされた成果物を指します。RELEASE は、リポジトリ内の最後の非スナップショット リリースを指します。一般に、成果物の非特定バージョンに依存するソフトウェアを設計することはベスト プラクティスではありません。ソフトウェアを開発している場合は、サードパーティ ライブラリの新しいリリースがリリースされたときにバージョン番号を更新しなくて済むように、便宜上 RELEASE または LATEST を使用することをお勧めします。ソフトウェアをリリースするときは、プロジェクトが特定のバージョンに依存していることを常に確認して、制御できないソフトウェア リリースによってビルドまたはプロジェクトが影響を受ける可能性を減らす必要があります。LATEST と RELEASE を使用する場合は、注意して使用してください。

を参照してくださいMaven ブックの POM 構文セクション詳細については、こちらのドキュメントをご覧ください。依存関係のバージョン範囲、 どこ:

  • 角括弧 ( [& ]) は「閉じた」(包括的) を意味します。
  • 括弧 ( (& )) は「開いている」(排他的) という意味です。

さまざまなオプションを示す例を次に示します。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メタデータの「最新」エントリを更新しますが、「リリース」エントリを更新するには、Maven スーパー POMこれは「-Prelease-profile」または「-DperformRelease=true」のいずれかで実行できます。


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

したがって、リリースでは正確なバージョンを定義するのが一般的に良い考えです。ティムの答え指摘する、Maven バージョン プラグイン依存関係のバージョンを更新するための便利なツールです。特にバージョン:最新バージョンを使用するそしてバージョン:最新リリースを使用する目標。

おすすめ記事