You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅运行一次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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 05:43:36