我在父 pom 中为库 A 定义了 4.3 版本,但在子 pom 指定的项目模块中,需要 A 的 2.5 版本。我面临的问题是两个版本都被保留,因此我遇到了冲突。
请告知如何解决该问题。
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
依赖中介——这决定了当遇到工件的多个版本时将使用哪个版本的依赖。目前,Maven 2.0 仅支持使用“最近定义”,这意味着它将使用依赖树中与您的项目最接近的依赖版本。您始终可以通过在项目的 POM 中明确声明来保证版本。请注意,如果两个依赖版本在依赖树中的深度相同,则在 Maven 2.0.8 之前没有定义哪个会获胜,但从 Maven 2.0.9 开始,声明中的顺序很重要:第一个声明获胜。
- “最近的定义”意味着使用的版本将是依赖关系树中最接近您的项目的版本,例如。如果 A、B 和 C 的依赖项定义为 A -> B -> C -> D 2.0 和 A -> E -> D 1.0,则构建 A 时将使用 D 1.0,因为从 A 到 D 的路径通过E 更短。您可以在 A 中显式添加对 D 2.0 的依赖项以强制使用 D 2.0
听起来 A 版本 2.5 被另一个依赖项传递包含。这使 4.3 和 2.5 版本的长度相同。
通过在您的项目中明确定义 A 2.5 的依赖关系,它将成为最接近的并覆盖任何其他版本。
通常,建议在给定时间在您的类路径中只有一个版本的依赖项。这样做可以让您确切地知道在运行时将使用哪个版本的类。
为避免版本冲突,请尝试像这样指定您的依赖项:
<dependency>
<groupId>commons-daemon</groupId>
<artifactId>commons-daemon</artifactId>
<version>1.0.1</version>
<exclusions>
<exclusion>
<groupId>some_group</groupId>
<artifactId>some_artifact</artifactId>
</exclusion>
</exclusions>
</dependency>
您需要在哪里指定与 2.5 版冲突的工件的groupId
和artifactId
。