我们有一个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又使用“ <plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.0</version>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/git.properties</generateGitPropertiesFilename>
</configuration>
</plugin>
”。但是为了有用,你必须标记你的版本(使用带注释/签名的标签)。
如果它对其他人有帮助。我知道你的是ANT
对于MAVEN构建,您可以在pom.xml文件中使用git-commit-id-plugin
http://www.baeldung.com/spring-git-information
请仔细阅读: 1. https://github.com/ktoso/maven-git-commit-id-plugin& 2. qazxswpoi了解更多信息。