如果模块的两个依赖关系都具有相同的依赖关系,但在pom中指定了不同的版本,则在构建模块时使用哪个版本?
例如
Artifact-A
/ \
/ \
/ \
Artifact-B Artifact-C
\ /
1.6.0 \ / 1.8.0
\ /
Artifact-D
同样,在下面详细介绍的方案中,Artifact-A将使用哪种版本的Artifact-C?
Artifact-A
| \
| |
| |
Artifact-B | 1.60.0
| |
1.62.0 | |
| /
Artifact-C
如果您可以提供或链接到有关maven如何解析这些版本的简要说明。
请参阅依赖机制简介:
有了传递性依赖关系,所包含库的图就可以迅速变得很大。因此,还有一些其他功能将限制包括哪些依赖项:
- 依赖关系中介 -确定遇到工件的多个版本时将使用哪个依赖关系版本。当前,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
这意味着对于第一个示例(并从Maven 2.0.9开始),如果在工件C之前将工件B声明为A中的依赖项,如下所示:
<dependency>
<groupId>groupB</groupId>
<artifactId>projectB</artifactId>
</dependency>
<dependency>
<groupId>groupC</groupId>
<artifactId>projectC</artifactId>
</dependency>
然后选择在项目B中声明的依赖项D。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句