【问题标题】:maven dependency version issuesmaven依赖版本问题
【发布时间】:2017-02-23 09:03:39
【问题描述】:

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

  1. 我创建了 App_1.jar,它使用的是 spring 版本 4.2.9。
  2. 我创建了 App_2.jar,它使用的是 spring 版本 4.3.4。
  3. 我创建了 App_3.jar,它使用的是 spring 版本 4.3.6。
  4. 我创建了 App_Main.war,它将 App_1.jar、App_2.jar、App_3.jar。

根据 Maven,如果您使用不同的版本,它将使用最新版本,但在我的情况下,它使用我首先包含的 Spring 版本的 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>

【问题讨论】:

标签: java jar maven-3


【解决方案1】:

你在哪里读到 maven use 最新的?

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

Maven transitive dependencies

一种可能的解决方案是使用&lt;dependencyManagement&gt; 来解决您的冲突。

<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

【讨论】:

    猜你喜欢
    • 2016-09-18
    • 2020-07-26
    • 2019-01-24
    • 2013-07-08
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    相关资源
    最近更新 更多