我们有一个包含约10个工件的模块化项目:
parent
+- artifact1
+- artifact2
+- artifact3
+- ...
+- artifact10
此外,某些工件彼此之间具有依赖性:
artifact1
+-> artifact2
+-> artifact3
+-> ...
+-> artifact10
artifact2
+-> artifact3
artifact4
+-> artifact3
artifact4
+-> artifact5
artifact5
+-> artifact6
我们当前的设置如下所示:
我们使用具有三个数字的版本控制方案:
<major version>.<minor version>.<patch level>
例如:
0.1.0-SNAPSHOT (a young artifact in development)
0.1.0 (the same artifact once it has been released)
0.1.1 (the same artifact after a hotfix)
问题:
一旦我们更改了工件的版本(例如:0.1.0 => 0.1.1),我们的父工件版本(12.7.3)就需要更新,因为它引用了旧的工件版本(0.1.0)。由于我们在父POM中更改了此引用(0.1.0 => 0.1.1),因此我们也需要增加父POM的版本(12.7.3 => 12.7.4)。现在,我们的工件仍引用先前的父版本(12.7.3),即我们需要再次对其进行更新。
解决这种循环亲子关系的最佳方法是什么?我们可以从父POM中删除我们自己的依赖关系,并在所有其他工件的POM中定义它们的版本,但这意味着一旦依赖关系发生变化,我们将需要更新所有工件。
编辑
包含我们的工件的简化目录结构:
.
├── [api:0.14.0-SNAPSHOT]
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java ...
│ │ └── webapp ...
│ └── test
├── [dao:1.21.0-SNAPSHOT]
│ ├── pom.xml
│ └── src
│ ├── main ...
│ └── test ...
├── [parent:0.11.0-SNAPSHOT]
│ ├── pom.xml
│ └── src
│ ├── main ...
│ └── test ...
├── [pdf-exporter:0.2.0-SNAPSHOT]
│ ├── pom.xml
│ └── src
│ ├── main ...
│ └── test ...
├── [docx-exporter:0.3.0-SNAPSHOT]
│ ├── pom.xml
│ └── src
│ ├── main ...
│ └── test ...
├── [exporter-commons:0.9.0-SNAPSHOT]
│ ├── pom.xml
│ └── src
│ ├── main ...
│ └── test ...
└── [security:0.6.0-SNAPSHOT]
├── pom.xml
└── src
├── main ...
└── test ...
工件目录(在方括号中;以及工件版本)彼此独立,即,为方便起见,它们仅位于公共根目录(“。”)中。每个工件都有其自己的git存储库。“ api”是部署在应用程序服务器上的工件。所有工件都这样引用“父级”(在开发过程中):
<parent>
<groupId>com.acme</groupId>
<artifactId>parent</artifactId>
<version>0.11.0-SNAPSHOT</version>
</parent>
<artifactId>api</artifactId>
<version>0.14.0-SNAPSHOT</version>
场景:
问题:api:0.14.0-SNAPSHOT引用了parent:0.11.0-SNAPSHOT。然后将api:0.14.0-SNAPSHOT更新为引用父代:0.12.0-SNAPSHOT。api:0.14.0-SNAPSHOT变为api:0.15.0-SNAPSHOT。但是parent:0.12.0-SNAPSHOT中的pom.xml引用了api:0.14.0-SNAPSHOT。=>恶性循环。
(注意:工件名称是为了简单起见而组成的。)
为了简化依赖性配置,请使用版本范围。
例如,工件A
需要B
带有version的工件0.1.0
。将依赖项配置为range <version>[0.1.0, 0.2.0)</version>
。
这意味着A
要求B
版本大于或等于0.1.0且小于0.2.0(因此,所有修补程序均适用于此工件)。
这有帮助,因为发布修补程序后,无需更改工件A
依赖项。只需重建父项目,修复程序B
将附加到项目A
此技术需要在发布修补程序时发布父项目。父项目是指类似WAR的库或EAR,或内部包含所有工件的Distribution Archive。
更多:3.4.3。依赖版本范围
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句