java - 如何使用模块化 Maven 项目管理版本号?
问题描述
我有一个相当典型的插件架构,看起来像这样(只是更大):
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 中是不可能的,所以我猜我们错过了一些东西。
我们如何在一个地方定义项目的版本号,并将其用于我们模块中的所有父级、工件和依赖项部分?
解决方案
版本 maven 插件提供了一次性更改子项目版本的可能性。包含插件后:
mvn versions:set -DnewVersion=<your version>
如果一切正确:
mvn versions:commit
推荐阅读
- jsp - Jsp中无法显示数据
- react-native - 多选 react-native-multiple-select 我尝试使用但源代码有错误
- python - 如何将不同的条件格式应用于不同的行?
- javascript - Chrome 扩展中的持久服务工作者
- python - FITS图像复制粘贴,Python
- flutter - 如何在不放大的情况下将视频存储在 S3 存储桶上?
- python-3.x - 在硒中打印网页
- ios - Swift AVPlayer 暂停并转到后台
- typescript - Typeorm 如何在 findOne() 中使用关系
- validation - 验证输入以检测 MongoDB 中的恶意值