排除并重新移植具有不同版本的Maven依赖项



此示例是基于真实世界问题的假设场景。考虑一个取自pom.xml文件的块,如下所示。在这种情况下,我想从artifact-a中排除artifact-b依赖项,并用不同的版本重新导入它。显然,排除的artifact-b版本不等于${product2.version}

<dependency>
<groupId>com.company.product1</groupId>
<artifactId>artifact-a</artifactId>
<version>${product1.version}</version>
<exclusions>
<exclusion>
<groupId>com.company.product2</groupId>
<artifactId>artifact-b</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.company.product2</groupId>
<artifactId>artifact-b</artifactId>
<version>${product2.version}</version>
</dependency>

因此,当为最终的应用程序执行mvn install命令时,在应用程序存储从其依赖项中收集的jar的文件夹下,我将只有带有${product2.version}artifact-b

这是我的模块的预期行为,但这是否也意味着artifact-ajar中的方法现在将使用${product2.version}调用artifact-bjar?如果是这样(这是我所期望的,因为目标存储库不包括排除的版本(,如果artifact-b中被调用的方法在新版本中不同,会发生什么?它是否只检查方法签名,或者是否存在其他可能导致编译/运行时错误的因素?

首先,正如khmarbaise所说,排除是不必要的。

其次,增加库版本可能会导致各种问题。编译时的问题主要是方法签名或缺少类,但在运行时,任何事情都可能发生,这取决于对该库的源代码所做的更改。

您可以希望库的维护人员尝试保持所有东西向后兼容。

最新更新