【问题标题】:Figuring out duplicate dependency in war找出战争中的重复依赖
【发布时间】:2017-02-08 12:46:20
【问题描述】:

有人能解释一下人们如何在他们的战争中获得不同版本的重复依赖项吗?可以举几个例子

我一辈子都无法理解。 Maven2 具有传递依赖的依赖中介

说我有:

A
- B
- C

B
- E

现在在一个项目 X 中,我使用 war 打包添加 A 和 B 作为依赖项。

由于前面提到的依赖中介,无论项目 A 中的 B 版本如何,在战争中我都会看到一个带有 X 中声明版本的单个 B jar。

这是因为 maven 将使用与我的项目最接近的依赖版本。

那么,我在这里缺少什么?人们是如何把这件事搞砸的? 期待启蒙

【问题讨论】:

  • 为了清楚起见,传递依赖关系沿依赖关系树更远的地方也会发生同样的事情。选择离项目最近的一个
  • 不知道关于 WAR,但我看到人们很容易在 EAR 中获得重复的依赖项。

标签: java maven-2


【解决方案1】:

对于具有相同 groupId 和 artifactId 的冲突 jar,maven 采用来自最后声明的依赖项的版本。

您可以使用依赖顺序。 只需更改项目 X 中 A 和 B 的依赖顺序即可。

场景1:这里因为2.5是在2.3之后添加的,所以2.5会被打包。

<dependencies>

        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.3</version>

        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.5</version>

        </dependency>

    </dependencies>

场景2:这里因为2.3是在2.5之后添加的,所以2.3会被打包。

<dependencies>

            <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.5</version>

        </dependency>

        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.3</version>

        </dependency>

    </dependencies>

您也可以尝试排除概念 here

【讨论】:

  • 这与我的问题无关。
  • 你希望两个不同版本的 jar 包在 war 中?
  • 是的。就像我说的,我不明白人们是如何遇到这个问题的,所以我想尝试重现它。我也在谈论传递依赖
猜你喜欢
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多