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

如何在Ant项目war文件的manifest中写入当前GIT分支信息

Ant构建将Git分支信息写入WAR包Manifest实现方案

不需要引入第三方Ant扩展包,用Ant原生任务+本地Git命令就能实现,配置分三步:

  • 拉取当前Git分支名存入Ant属性
    优先用Git原生命令获取分支名,同时做容错处理,避免非Git环境、没装Git客户端时构建直接失败:
<!-- 给Git分支属性设默认值,异常场景下兜底 -->
<property name="git.branch" value="unknown"/>

<!-- 调用git命令获取当前检出的分支名 -->
<exec executable="git" outputproperty="git.branch" failifexecutionfails="false" errorproperty="git.cmd.error">
    <arg value="rev-parse"/>
    <arg value="--abbrev-ref"/>
    <arg value="HEAD"/>
</exec>

<!-- 清理命令输出带的换行、首尾空白字符,避免写入Manifest的内容带乱码 -->
<loadresource property="git.branch">
    <string value="${git.branch}"/>
    <filterchain>
        <trim/>
        <striplinebreaks/>
    </filterchain>
</loadresource>
  • 动态生成带Git信息的Manifest文件
    不用提前手写MANIFEST.MF,构建时动态生成即可,除了Git分支还可以按需加提交ID、构建时间、版本号等自定义字段:
<target name="generate-manifest">
    <manifest file="${build.dir}/META-INF/MANIFEST.MF">
        <attribute name="Manifest-Version" value="1.0"/>
        <attribute name="Created-By" value="Ant ${ant.version}"/>
        <!-- 写入Git分支自定义属性 -->
        <attribute name="Git-Branch" value="${git.branch}"/>
        <!-- 按需追加其他属性,比如Git提交哈希、构建时间等 -->
    </manifest>
</target>
  • 打包WAR时引用自定义Manifest
    配置war任务时指定我们生成的Manifest文件,替换war任务默认生成的空白Manifest即可,原有war包的资源配置(classes、lib、前端资源等)不需要改动:
<target name="package-war" depends="compile, generate-manifest">
    <war destfile="${output.dir}/your-app.war" webxml="${web.root}/WEB-INF/web.xml">
        <!-- 关联带Git信息的Manifest -->
        <manifest file="${build.dir}/META-INF/MANIFEST.MF"/>
        <!-- 原有资源配置保持不变 -->
        <classes dir="${build.dir}/classes"/>
        <lib dir="${dependency.lib.dir}"/>
        <fileset dir="${web.root}"/>
    </war>
</target>

构建验证:打包完成后解压war包,查看META-INF/MANIFEST.MF文件,就能看到Git-Branch: 你的分支名的条目。如果是CI环境构建,没有预装Git客户端的话,可以直接读取CI系统预置的分支环境变量(比如GitHub Actions的GITHUB_REF_NAME、GitLab CI的CI_COMMIT_BRANCH),替换掉exec拉取分支的逻辑即可,稳定性更高。

顺带提一句你之前遇到的Maven场景下buildnumber-maven-plugin无法写入war包的问题,不是插件不支持war,是没有把插件生成的buildNumber属性绑定到maven-war-plugin的manifestEntries配置里,给war插件加对应配置就能实现和jar包一致的写入效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:27:13