我们有一个包含源几个相关的Java WAR和JAR的一个Git仓库。 如果Java代码可以在某种程度上这将是不错:
System.err.println("I was built from git commit " + commitID);
(显然,真正的代码可能把这个放入HTTP头,记录它在启动时,或什么的,那现在这并不重要)
我们使用Ant来构建(至少在产品构建,似乎有些程序员做他们的测试在Eclipse的,我知道更不解的)二进制文件。
有没有一个规范的方式来获得当前的git签入我们的Java在构建时提交ID? 如果没有,可以使用Ant构建人建议他们是如何做到这一点,我们会看到,如果一个典型的解决方案出现? 我敢肯定,我可以创造完全由全棉布自己的东西,但是这似乎是一个可重复使用的构建块,所以我宁愿不要。
我不知道是否有用于Git任何Ant任务(我用Google搜索了一下没有成功),反正蚂蚁可以更新的属性与彼得的选项(文件git rev-parse HEAD
),然后在运行时使用该属性来获取修订数。 这是更清洁和较有蚂蚁生成一个.java文件IDE友好 。
你可以得到最后一次提交的SHA与
git rev-parse HEAD
但它通常是一个更为有用使用
git describe
它会给你的东西,看起来像这样:
v0.7.0-185-g83e38c7
这工作,如果你有标签 - 它会告诉你有多少,从最后的有效标记您的当前结算是在加上那个承诺的部分SHA提交,这样你就可以用它来基地结账关闭后。 你可以使用这个标识就像在大多数情况下一个SHA,但它更可读。
我写了一个Ant任务来获得使用JGit API(不混帐命令行应用程序)的buildnumber,看到jgit-buildnumber-ANT任务 。 然后,你可以存储MANIFEST.MF文件,这里面buildnumber和运行时类路径中得到它。
git rev-parse HEAD
会打印你可能想要的东西(例如ID HEAD
提交)。 你可以让蚂蚁生成一个简单的Java类具有此ID为静态常量。
首先,你可以使用ident
gitattribute用$Id$
关键字(尽管它不是可能是你想要的东西;它是文件内容的哈希值,并没有任何与当前的项目版本做)。
其次,你可以做到这一点的方式Linux内核和Git本身做到这一点:在Makefile文件(在你的情况:在Ant文件)有规则,它取代了一些占位符,通常是“@@ VERSION @@”(但在Perl它的情况下,是'++ ++ VERSION')通过的结果GIT-VERSION-GEN ,又使用“ GIT中描述 ”。 但要做到有用,你必须标记你的发行版(使用注解/签订标签)。
如果它可以帮助别人。 我知道你们是ANT
对于Maven构建,你很可能使用git提交-ID-插件,在pom.xml文件
<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>
请仔细阅读:
1. http://www.baeldung.com/spring-git-information &
2. https://github.com/ktoso/maven-git-commit-id-plugin获取更多信息。