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バージョンステートメントに従ってアービトレート(上書き)しますが、警告はありません。
- アービトレーションステートメントがない場合、バージョンは依存の最短パスに従って決定されます。
- パスが同じ場合は、間隔制限が厳しいバージョンが優先されます。
- パスが同じでバージョン間隔がない場合は、先入観の原則に従う必要があります。