我有一个相当典型的插件架构,看起来像这样(只是更大):
project
core
data
main
ui
父项目定义了版本号,打包为 apom
并在其中定义了模块pom.xml
:
<groupId>group</groupId>
<artifactId>project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
...
<modules>
<module>core</module>
<module>data</module>
<module>main</module>
<module>ui</module>
</modules>
所有的子模块到处都有很多对父版本号的引用。以下是主模块外观的示例,可让您了解一下:
<parent>
<groupId>group</groupId>
<artifactId>project</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>group</groupId>
<artifactId>project.main</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>group</groupId>
<artifactId>group.core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>group</groupId>
<artifactId>group.data</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>group</groupId>
<artifactId>group.ui</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
我们已经厌倦了不得不在每个父块、每个工件块以及每个模块的每个依赖块中的每个版本中一遍又一遍地更改版本号。在某些情况下,有人使用搜索/替换来命中其他文件并搞砸了构建。我们尝试使用属性,但由于某些荒谬的原因,这在父定义中不起作用。
父级中定义的版本号是我们唯一关心的地方。我们甚至不需要子模块来拥有版本(或工件,就此而言)。我们可以在其他 Ant 项目中做到这一点。我们可以在其他 Gradle 项目中做到这一点。我无法想象这在 Maven 中是不可能的,所以我猜我们错过了一些东西。
我们如何在一个地方定义项目的版本号,并将其用于我们模块中的所有父级、工件和依赖项部分?