将当前git commit id注入Java webapp

我们有一个git存储库,其中包含一些相关Java WAR和JAR的源代码。 如果Java代码可能以某种方式:

System.err.println("I was built from git commit " + commitID); 

(显然,真正的代码可能会将其放入HTTP标头,在启动时记录它,或者其他什么,现在不重要)

我们正在使用Ant来构建(至少对于生产构建,似乎有些程序员在Eclipse内部进行测试,我知道的更少)二进制文件。

有没有一种规范的方法可以在构建时将当前git checkout的提交ID存入我们的Java? 如果没有,使用Ant构建的人是否可以建议他们如何做,我们将看看是否出现了规范解决方案? 我相信我可以完全用整块布料来创造一些东西,但这似乎是一个可重复使用的构建块,所以我宁愿不这样做。

我不知道git是否有任何Ant任务(我googled有点没有成功),无论如何Ant可以使用Piotr的选项( git rev-parse HEAD )更新属性文件,然后在运行时使用该属性来获取修订版本数。 这比让Ant生成.java文件更干净,更友好

您可以使用最后一次提交SHA

 git rev-parse HEAD 

但它通常使用起来更有用

 git describe 

这会给你一些看起来像这样的东西:

 v0.7.0-185-g83e38c7 

如果您有标签,这会有效 – 它会告诉您当前结账时最后一个有效标签的提交数量加上该提交的部分SHA,因此您可以使用它来支持以后的结账。 在大多数情况下,您可以像使用SHA一样使用此标识符,但它更具人性化。

我编写了一个Ant任务来使用JGit API获取buildnumber(没有git命令行应用程序),请参阅jgit-buildnumber-ant-task 。 然后,您可以将此buildnumber存储在MANIFEST.MF文件中,并在运行时从类路径获取它。

git rev-parse HEAD将打印您可能想要的内容(例如HEAD提交的ID)。 你可以使用这个id作为静态常量来生成一个简单的Java类。

首先,您可以将ident gitattribute与$Id$关键字一起使用(尽管它可能不是您想要的;它是文件内容的哈希值,与当前项目版本无关)。

其次,你可以像Linux内核和Git本身那样做:在Makefile(在你的情况下:在Ant文件中)有一些规则取代了一些占位符,通常是’@@ VERSION @@’(但是在Perl的情况下它GIT-VERSION-GEN的结果是’++ VERSION ++’),后者又使用“ git describe ” 。 但是为了有用,你必须标记你的版本(使用带注释/签名的标签)。

如果它对其他人有帮助。 我知道你的是ANT

对于MAVEN构建,您可以使用git-commit-id-plugin

   pl.project13.maven git-commit-id-plugin 2.2.0    revision     ${project.basedir}/.git true ${project.build.outputDirectory}/git.properties   

请访问: http : //www.baeldung.com/spring-git-information&https : //github.com/ktoso/maven-git-commit-id-plugin了解更多信息。