maven依赖版本问题

时间:2017-02-23 09:03:39

标签: java jar maven-3

我刚刚遇到与Maven和Dependent JAR版本相关的问题。我创建了以下项目来分析问题。

  1. 我创建了使用spring版本4.2.9的App_1.jar。
  2. 我创建了使用spring version 4.3.4的App_2.jar。
  3. 我创建了使用spring版本4.3.6的App_3.jar。
  4. 我创建了App_Main.war,它将是App_1.jar,App_2.jar,App_3.jar。
  5. 根据maven,如果你使用不同版本,它将使用最新版本,但在我的情况下,它使用我首先包含的jar的弹簧版本,即App_1.jar,其版本是4.2.9。

    这是代码。

    **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>
    

1 个答案:

答案 0 :(得分:2)

你在哪里读到maven使用的是最新的?

对于传递依赖项,Maven使用“最接近胜利”策略来解决版本冲突,这意味着它将在依赖树中使用与项目最接近的依赖项版本。

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