将当前git提交id注入Java webapp

将当前git提交id注入Java webapp,java,git,ant,Java,Git,Ant,我们有一个git存储库,其中包含一些相关Java WAR和JAR的源代码。如果Java代码能够以某种方式: System.err.println("I was built from git commit " + commitID); (显然,真正的代码可能会将其放入HTTP头中,在启动时将其记录下来,或者其他什么,现在这并不重要) 我们正在使用Ant构建(至少对于生产构建,似乎有些程序员是从Eclipse内部进行测试的,我对Eclipse的了解更少) 有没有一种规范的方法可以在构建时将当前gi

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

System.err.println("I was built from git commit " + commitID);
(显然,真正的代码可能会将其放入HTTP头中,在启动时将其记录下来,或者其他什么,现在这并不重要)

我们正在使用Ant构建(至少对于生产构建,似乎有些程序员是从Eclipse内部进行测试的,我对Eclipse的了解更少)


有没有一种规范的方法可以在构建时将当前git签出的提交id获取到Java中?如果没有,使用Ant构建的人能否建议他们将如何进行构建,我们将看看是否会出现一个规范的解决方案?我相信我完全可以用整个布料自己发明一些东西,但这看起来像是一个可重用的构建块,所以我宁愿不要。

git rev parse HEAD
将打印您可能需要的内容(例如
HEAD
commit的id)。
你可以让ant生成一个简单的Java类,将这个id作为一个静态常量。

我不知道git是否有任何ant任务(我在Google上搜索了一下,但没有成功),无论如何ant可以使用Piotr的选项(
git rev parse HEAD
)更新属性文件,然后在运行时使用该属性来获取修订号。这比让Ant生成.java文件更干净、更友好。

首先,您可以使用
ident
$Id$
关键字(尽管这可能不是您想要的;它是文件内容的散列,与当前项目版本无关)


其次,您可以按照Linux内核和Git本身的方式来做:在Makefile(在您的例子中:在Ant文件中)中,有一条规则用结果替换某些占位符,通常是“@@VERSION@”(但在Perl中是“++VERSION++”),而结果反过来使用。但是为了使它有用,您必须标记您的发布(使用带注释/签名的标记)。

您可以使用

git rev-parse HEAD
但是它通常更有用

git describe
这将为您提供如下内容:

v0.7.0-185-g83e38c7

如果您有标记,则此操作有效-它将告诉您当前签出所处的上一个有效标记中有多少个提交,以及该提交的部分SHA,因此您可以使用它在以后进行签出。在大多数情况下,您可以像使用SHA一样使用此标识符,但它更易于人类阅读。

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

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

对于MAVEN构建,您可以在pom.xml文件中使用git提交id插件

    <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>

pl.project13.maven
&

2.更多信息。

$Id$属性是blob Id,因此我认为这不是我们想要的(其他地方的更改不会更新blob),我将接受这一点作为问题的答案。我真的很希望得到更多特定于Ant的材料,得到最多反馈的Git方面是我已经有了相当好的想法的方面。但是使用属性文件的建议似乎不错。如果您想知道“g”是什么:“哈希后缀是“-g”+7字符的缩写,表示父项的提示提交(它是2414721b194453f058079d897d13c4e377f92dc6)。“g”前缀代表“git”“并用于描述软件版本,具体取决于管理软件的SCM。这在人们可能使用不同SCM的环境中非常有用。”。来源: