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

时间:2020-08-12 19:53:03

标签: java 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命令时,我将只有 artifact-b ,其中${product2.version}位于应用程序存储收集的jar的文件夹下从其依赖性。

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

1 个答案:

答案 0 :(得分:1)

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

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

您只希望库的维护者设法使所有内容向后兼容。