【发布时间】:2019-07-19 20:30:20
【问题描述】:
我有一个相当典型的插件架构,看起来像这样(只是更大):
project
core
data
main
ui
父项目定义了版本号,打包为pom,并在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 中是不可能的,所以我猜我们遗漏了一些东西。
我们如何在一个地方定义项目的版本号,并将其用于我们模块中的所有父级、工件和依赖项部分?
【问题讨论】:
-
不,我认为你没有错过任何东西。如果您不关心子模块的版本,只需在父模块中定义它以及在子模块中与父模块的关系。在 parent 的 dependencyManagement 中使用 ${project.version} 来定义模块的首选版本,从这里开始,所有依赖项都不再需要版本了。
标签: java maven maven-3 build-system maven-module