Mavenプロジェクトでの依存バージョン管理

Mavenを使用してJavaプロジェクトを編成する利点の1つは、必要なすべてのライブラリとそのバージョンの便利な説明です。 さらに、プロジェクトの開発に伴い、これらのライブラリのバージョンを更新できるようになる可能性があります。 このような機能は、 Versions Maven拡張機能によって提供されます。



依存関係のバージョン管理は、次の3つの部分に分けることができます。

  1. 親プロジェクトのバージョン(ある場合);
  2. 依存バージョン;
  3. 使用されるMaven拡張機能のバージョン。


最も簡単なタスクは、親プロジェクトのバージョンを更新することです。 プロジェクトのルートでコマンドを実行するだけで十分です。



mvn versions:update-parent
      
      





他の依存関係のバージョンを更新できるようにするには、それらのバージョンをMavenプロジェクトのプロパティセクションで変数として明示的に記述する必要があります。 変数を参照せずにバージョンが記述されている依存関係は、この方法では更新できません。



同じことは、使用するすべての拡張機能のバージョンにも当てはまります。 したがって、バージョンを変数に入れる際に使用されるすべての拡張機能をプロジェクトに明示的に登録する必要があります。その後、バージョンの更新も開始されます。



その結果、依存関係と拡張機能はすべて次のようになります。



 <?xml version="1.0" encoding="UTF-8"?> <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <properties> <spring.version>4.2.0.RELEASE</spring.version> <maven-clean.version>2.6.1</maven-clean.version> </properties> <dependencies> <!-- Spring Framework --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <executions> <execution> <id>auto-clean</id> <phase>initialize</phase> <goals> <goal>clean</goal> </goals> </execution> </executions> </plugin> </plugins> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-clean-plugin</artifactId> <version>${maven-clean.version}</version> </plugin> </plugins> </pluginManagement> </build> </project>
      
      





明示的に指定しなかった他の拡張機能を把握するには、 次のコマンドを使用する必要があります。



 mvn versions:display-plugin-updates
      
      





結果に応じて、プロジェクトに登録されていない他の拡張機能や、管理していないバージョンを確認できます。 また、すべての拡張機能が正しく機能するために、プロジェクトで指定する必要があるMavenの最小バージョンを示します。



親プロジェクトを介してプロジェクトに含まれる依存関係は、プロジェクトの依存関係のリストに明示的に含めて親から転送するまでバージョンを更新しないことに注意することが重要です。 これは、既成の親プロジェクトが提供するものとは異なるバージョンのセットをプロジェクトに含める場合に役立ちます。



上記のすべての操作が完了したら、 次のコマンドを実行して、変数として記述されているすべてのバージョンを直接更新できます。



 mvn versions:update-properties
      
      





次に、Mavenプロジェクトの拡張機能によって行われた変更のリストを表示し、それらの推奨事項を決定できます。



提案された新しいバージョンのリストを見ると、おそらく必要ではない依存関係の最終ではないバージョンがそこに現れ始めることがすぐにわかります。 アップグレード中にスキップしたいバージョンを説明するには、特定のバージョンまたは特定の依存関係またはそのグループの正規表現の形式で例外を説明できる特別なファイルを使用します



プロジェクトルートに次の内容のmaven-version-rules.xmlファイルを作成します。

 <?xml version="1.0" encoding="UTF-8"?> <ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" comparisonMethod="maven" xmlns="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0" xsi:schemaLocation="http://mojo.codehaus.org/versions-maven-plugin/rule/2.0.0 http://www.mojohaus.org/versions-maven-plugin/xsd/rule-2.0.0.xsd"> <rules> <rule groupId="org.hibernate"> <ignoreVersions> <ignoreVersion type="regex">.*Alpha.*</ignoreVersion> <ignoreVersion type="regex">.*Beta.*</ignoreVersion> <ignoreVersion type="regex">.*[.]CR.*</ignoreVersion> </ignoreVersions> </rule> </rules> </ruleset>
      
      





そして接続してください:

 <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>versions-maven-plugin</artifactId> <configuration> <generateBackupPoms>false</generateBackupPoms> <rulesUri>file://${project.basedir}/maven-version-rules.xml</rulesUri> </configuration> </plugin>
      
      





その結果、将来バージョンを更新するために、そのようなupdate.batファイル(オプションとしてupdate.sh )を作成することができます。



 call mvn versions:update-parent versions:update-properties
      
      





またはのみ:



 call mvn versions:update-properties
      
      





親プロジェクトのSpring IOプラットフォームSpring Bootなどのプロジェクトは、非常に多数のライブラリの関連するテスト済みバージョンを既に提供しているため、特定のバージョンを指定せずにプロジェクトで使用できます。



すべてのソースはGitHubで入手できます



All Articles