2017-02-23 24 views
0

MavenとDependent JARのバージョンに関する問題が発生しました。問題を分析するために以下のプロジェクトを作成します。依存関係のバージョンの問題

  1. 春バージョン4.2.9を使用しているApp_1.jarを作成しました。
  2. 春バージョン4.3.4を使用しているApp_2.jarを作成しました。
  3. 春バージョン4.3.6を使用しているApp_3.jarを作成しました。
  4. 私は、App_1.jar、App_2.jar、App_3.jarになるApp_Main.warを作成しました。

あなたはそれが最新のものを使用しますが、私の場合、それは私がApp_1.jarであり、そのバージョンは4.2.9である最初含ま瓶の春バージョンを使用して異なるバージョンを使用している場合にMavenによります。

ここにコードがあります。

**App_1 POM.xml** 

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
     <modelVersion>4.0.0</modelVersion> 
     <groupId>com.ksh</groupId> 
     <artifactId>App_1</artifactId> 
     <packaging>jar</packaging> 
     <version>1.0</version> 
     <name>App_1</name> 
     <url>http://maven.apache.org</url> 
     <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>4.2.9.RELEASE</version> 
     </dependency> 
     </dependencies> 
    </project> 

**App_2 POM.xml** 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.ksh</groupId> 
    <artifactId>App_2</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0</version> 
    <name>App_2</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.3.4.RELEASE</version> 
    </dependency> 
    </dependencies> 
</project> 

**App_3 POM.xml** 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.ksh</groupId> 
    <artifactId>App_3</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0</version> 
    <name>App_3</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.3.6.RELEASE</version> 
    </dependency> 
    </dependencies> 
</project> 

App_Main POM.xml 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.mycompany.app</groupId> 
    <artifactId>App_Main</artifactId> 
    <packaging>war</packaging> 
    <version>1.0</version> 
    <name>App_Main Maven Webapp</name> 
    <url>http://maven.apache.org</url> 
    <dependencies> 
    <dependency> 
     <groupId>com.ksh</groupId> 
     <artifactId>App_1</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.ksh</groupId> 
     <artifactId>App_2</artifactId> 
     <version>1.0</version> 
    </dependency> 
    <dependency> 
     <groupId>com.ksh</groupId> 
     <artifactId>App_3</artifactId> 
     <version>1.0</version> 
    </dependency> 
    </dependencies> 
    <build> 
    <finalName>App_Main</finalName> 
    </build> 
</project> 
+0

Mavenのは、自動的に最新バージョンを選択しません。あなたはどこを読んだのですか?それは、「依存ツリー内で最も近い」とみなされるものを選択します:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html(** Maven 2.0は「最も近い定義」のみをサポートしています)これは、依存関係のツリーでプロジェクトに最も近い依存関係のバージョンを使用することを意味します。**) –

+0

このスレッドでそれを読んでいます。 http://stackoverflow.com/questions/4312553/maven-assembly-add-different-version-of-the-same-artifact – KSHiTiJ

答えて

2

どこで最新のものを読んだのですか?

トランジション依存関係の場合Mavenは "nearest-wins"戦略を使用してバージョンの競合を解決します。つまり、依存関係のツリー内でプロジェクトに最も近い依存関係のバージョンを使用します。

Maven transitive dependencies

一つの可能​​な解決策は、あなたの競合を解決するために<dependencyManagement>を使用しています。

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>spring_context_version_you_want_to_use</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement> 

Maven dependency managament

あなたはコマンドで依存関係のあなたのツリーを確認することができます。

mvn dependency:tree -Dverbose -Dincludes=your-jar 

Resolving conflicts using the dependency tree