如果模块的两个依赖关系都有一个共同的depdnendency但在poms中指定了不同的版本,那么在构建模块时使用哪个版本?
例如
Artifact-A
/ \
/ \
/ \
Artifact-B Artifact-C
\ /
1.6.0 \ / 1.8.0
\ /
Artifact-D
Run Code Online (Sandbox Code Playgroud)
同样在下面详述的场景中,Artifact-C会使用什么版本的Artifact-C?
Artifact-A
| \
| |
| |
Artifact-B | 1.60.0
| |
1.62.0 | |
| /
Artifact-C
Run Code Online (Sandbox Code Playgroud)
如果您可以提供或链接到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),如果工件B在工件C之前被声明为A中的依赖项,如下所示:
<dependency>
<groupId>groupB</groupId>
<artifactId>projectB</artifactId>
</dependency>
<dependency>
<groupId>groupC</groupId>
<artifactId>projectC</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
然后选择项目B中声明的依赖关系D.
归档时间: |
|
查看次数: |
1081 次 |
最近记录: |