如何仅运行一次git-commit-id-plugin并在子项目中复用?
解决方案:仅运行一次git-commit-id-maven-plugin实现多模块项目Git属性共享
可行,核心是让根项目生成的Git属性能传递给所有子项目,同时限制插件仅在根项目执行一次。以下是具体实现步骤:
1. 调整根pom的git-commit-id-maven-plugin配置
修改根pom中git profile里的插件配置,添加关键参数实现属性跨模块注入:
<profile> <id>git</id> <activation> <file> <exists>${project.basedir}/.git</exists> </file> </activation> <build> <plugins> <plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-maven-plugin</artifactId> <version>7.0.0</version> <executions> <execution> <id>git-revision</id> <phase>validate</phase> <goals> <goal>revision</goal> </goals> </execution> </executions> <configuration> <dotGitDirectory>${project.basedir}/.git</dotGitDirectory> <!-- 启用后,插件会将Git属性注入所有Reactor子项目 --> <injectAllReactorProjects>true</injectAllReactorProjects> <!-- 可选:生成git.properties文件用于调试验证 --> <generateGitPropertiesFile>true</generateGitPropertiesFile> <generateGitPropertiesFilename>${project.build.directory}/git.properties</generateGitPropertiesFilename> </configuration> </plugin> </plugins> </build> </profile>
2. 子项目中直接引用Git属性
在子项目的maven-jar-plugin(或其他需要使用属性的插件)中直接使用${git.commit.id.abbrev}即可,无需重复配置git-commit-id-maven-plugin:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.3.0</version> <configuration> <archive> <manifestEntries> <Git-Commit-Hash>${git.commit.id.abbrev}</Git-Commit-Hash> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build>
关键原理说明
- 默认情况下,git-commit-id-maven-plugin生成的属性仅在当前项目(根项目)的构建上下文可见,子项目无法直接读取。
injectAllReactorProjects=true参数会让插件把生成的所有Git相关属性(如git.commit.id.abbrev、git.branch等)注入到所有参与构建的Reactor项目中,实现属性跨模块共享。- 插件仅在根项目的
validate阶段执行一次,所有子项目复用生成的属性,完全符合你的需求。
注意事项
- 确保使用的Maven版本≥3.6.0,git-commit-id-maven-plugin 7.0.0对Maven版本有最低要求。
- 子项目不要覆盖Git相关属性,避免干扰属性传递。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

