Maven依存バージョンアービトレーション

Maven依存関係ベース

単純な依存関係
<dependency>
<groupId>com.alibaba.share</groupId>
<artifactId>test</artifactId>
<version>1.4</version>
</dependency>

依赖库命名规则:
${groupId.part1}/${groupId.part2}/${version}
例:com/alibaba/share/1.4
 
依赖库文件命名规则:
${artifactId}-${version}-${classifier}.${type}
例:test-1.4-source.jar

注:classfierは分類子であり、ほとんどの場合使用されませんが、次のように記述
する必要があります。たとえば、TestNG必須では、jdk14とjdk15を区別する分類子を提供する必要があります。

<dependency>  
   <groupId>org.testng</groupId>  
   <artifactId>testng</artifactId>  
   <version>5.7</version>  
   <classifier>jdk15</classifier>  
</dependency>
Maven依存スコープ
<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
 </dependency>

上記のスコープは、合意された依存スコープです。

  • コンパイル:デフォルト値、常に利用可能で、最後にパッケージ化されます
  • 提供:コンパイル中に使用可能で、推移的に依存せず、パッケージ化されません。例:Webコンテナーで提供されるjarパッケージに依存し、コンパイル時に依存関係を追加する必要があり(Webコンテナーはまだ介入していません)、実行時にWebコンテナーによって提供されます。
  • テスト:単体テストの実行時に使用可能で、パッケージ化されず、推移的に依存しません
  • ランタイム:実行とテストには必要ですが、コンパイルには必要ありません
  • システム:推奨されません
  • Maven依存関係管理
異なるサブモジュールでの依存関係バージョンの競合を回避する

メインpomで依存関係を構成する

<dependencyManagement>  
    <dependencies>  
     <dependency>  
       <groupId>mysql</groupId>  
       <artifactId>mysql-connector-java</artifactId>  
      <version>5.1.2</version>  
     </dependency>  
      ...  
   <dependencies>  
</dependencyManagement>

サブpomに依存関係を追加する

<dependencies>  
   <dependency>  
    <groupId>mysql</groupId>  
    <artifactId>mysql-connector-java</artifactId>  
   </dependency>  
</dependencies>

DependencyManagementは実際には依存関係を導入せず、サブpomにのみ追加されます。親pomで構成された後、子モジュールは、単純なgroupIdとartifactIdを使用するだけで、対応する親モジュールの依存関係構成を自動的に継承できます。サブpomのバージョンが定義されている場合、管理のバージョンをオーバーライドします。

オプションの依存関係

非推移的な依存関係を
追加する:プロジェクトに依存関係を追加します。

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>1.5</version>
      <optional>true</optional>
    </dependency>

別のプロジェクトでは、前のプロジェクトに依存しますが、mysqlの依存関係を使用する必要がある場合は、それを追加する必要があります。

依存バージョンの境界

必要な依存バージョン> = 3.8および<4.0

<version>[3.8,4.0)</version>

必要な依存関係バージョン<= 3.8.1

<version>[,3.8.1]</version>

要件はバージョン3.8.1である必要があります。そうでない場合、ビルドは失敗し、バージョンの競合が発生します。元の表現3.8.1は、すべてのバージョンで問題がないことを意味しますが、3.8.1が最適です

l<version>[3.8.1]</version>

依存関係を排除する

project-aに依存しますが、project-aで導入されたproject-bへの依存を除外します

<dependency>
  <groupId>org.sonatype.mavenbook</groupId>
  <artifactId>project-a</artifactId>
  <version>1.0</version>
  <exclusions>
    <exclusion>
      <groupId>org.sonatype.mavenbook</groupId>
      <artifactId>project-b</artifactId>
    </exclusion>
  </exclusions>
</dependency>

依存関係を置き換える

前の手順で除外を使用してから、置き換える依存関係を追加するだけです。これが置き換えられることを示す特別な記号はありません。

バージョン競合アービトレーション

バージョンアービトレーションルール(Maven 2.2.1バージョンでテストおよび検証済み)

  • プロジェクトの一般的なPOMのDependencyManagerバージョンステートメントに従ってアービトレート(上書き)しますが、警告はありません。
  • アービトレーションステートメントがない場合、バージョンは依存の最短パスに従って決定されます。
  • パスが同じ場合は、間隔制限が厳しいバージョンが優先されます。
  • パスが同じでバージョン間隔がない場合は、先入観の原則に従う必要があります。

おすすめ

転載: blog.csdn.net/zimou5581/article/details/112259427