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

Maven多模块部署Nexus失败后Commit Hash及制品状态问询

针对Maven多模块项目Nexus上传中断问题的解答

先逐个解答你的三个问题,再补充如何获取已上传快照对应的Git commit hash:

1. 前两个组件A和B是否已上传至Nexus?

大概率是已经上传成功了。Maven的多模块部署是按模块顺序依次执行的,每个模块的deploy目标是独立完成的——只要componentA和componentB的deploy阶段在网络问题发生前已经执行完毕,它们的制品就已经被推送到Nexus了。你可以直接登录Nexus仓库,在对应的快照仓库路径下(比如groupId/com/projectAlfa/componentA/[版本号])查看是否有对应的jar/pom等文件来确认。

2. 若查询projectAlfa的commit hash,会得到什么结果?

这里要区分两个场景:

  • 如果你是在本地Jenkins构建机器上查询这个项目的Git commit hash:只要构建过程中没有修改代码仓库,得到的就是触发本次构建的那个commit hash(也就是整个projectAlfa所有模块共同基于的commit)。
  • 如果你是想从Nexus上的制品反向查commit hash:默认情况下Maven不会自动把commit hash嵌入到快照制品里,所以直接查不到,需要你提前在构建配置里做额外处理(后面会说)。

3. projectAlfa的各组件是否会处于不同状态/拥有不同commit hash?

不会。因为本次构建是基于同一个Git commit触发的,componentA、B、C在构建时的代码都是同一个commit的内容。只是部署阶段中途失败,导致C没上传,A、B上传成功了——它们的代码基底是同一个commit,只是部署状态不同(A、B已在Nexus,C不在)。


如何获取Nexus上已上传快照制品对应的Git commit hash?

要实现这个,你需要在构建阶段提前把commit hash注入到Maven项目的构建信息里,常见的两种方式:

  1. 使用git-commit-id-plugin插件:
    在父pom.xml里添加这个插件配置,它会自动获取当前Git commit hash,并把它写入到项目的pom.properties或者生成一个单独的git.properties文件,打包到制品中:

    <build>
      <plugins>
        <plugin>
          <groupId>pl.project13.maven</groupId>
          <artifactId>git-commit-id-plugin</artifactId>
          <version>4.9.10</version>
          <executions>
            <execution>
              <id>get-the-git-infos</id>
              <goals>
                <goal>revision</goal>
              </goals>
            </execution>
          </executions>
          <configuration>
            <generateGitPropertiesFile>true</generateGitPropertiesFile>
            <generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
          </configuration>
        </plugin>
      </plugins>
    </build>
    

    部署完成后,你可以从Nexus下载componentA的jar包,解压后找到git.properties文件,里面的git.commit.id字段就是对应的commit hash。

  2. 自定义Maven属性注入:
    在Jenkins构建时,先通过git rev-parse HEAD命令获取当前commit hash,然后作为Maven参数传入:

    mvn deploy -Dgit.commit.hash=$(git rev-parse HEAD)
    

    然后在pom.xml里把这个属性写入到pom.properties中:

    <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.hash}</Git-Commit-Hash>
              </manifestEntries>
            </archive>
          </configuration>
        </plugin>
      </plugins>
    </build>
    

    之后解压jar包,查看META-INF/maven/[groupId]/[artifactId]/pom.properties,就能看到这个自定义属性了。


内容的提问来源于stack exchange,提问作者m19v

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:42:51