Внедрение текущего идентификатора коммита git в веб-приложение Java - PullRequest
17 голосов
/ 20 июня 2009

У нас есть git-репозиторий, содержащий исходные тексты для нескольких связанных Java WAR-ов и JAR-файлов. Было бы хорошо, если бы код Java мог как-то:

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

(Очевидно, что реальный код может помещать это в заголовок HTTP, регистрировать его при запуске или что-то еще, что сейчас не важно)

Мы используем Ant для сборки (по крайней мере, для производственных сборок, кажется, что некоторые программисты проводят тестирование из Eclipse, о котором я знаю даже меньше).

Есть ли канонический способ получить идентификатор фиксации для текущей проверки git в нашу Java во время сборки? Если нет, могут ли люди, использующие Ant для сборки, предложить, как они это сделают, и мы увидим, появится ли каноническое решение? Я уверен, что могу сам что-нибудь придумать из цельной ткани, но это похоже на многократно используемый строительный блок, поэтому я бы предпочел этого не делать.

Ответы [ 6 ]

14 голосов
/ 20 июня 2009

Вы можете получить последний коммит SHA с помощью

git rev-parse HEAD

но обычно это гораздо полезнее

git describe

, который даст вам что-то похожее на это:

v0.7.0-185-g83e38c7

Это работает, если у вас есть теги - он сообщит вам, сколько коммитов из последнего действующего тега находится в вашей текущей проверке плюс частичный SHA для этой фиксации, так что вы можете использовать его, чтобы основать извлечение позже. Вы можете использовать этот идентификатор точно так же, как и SHA, но в большинстве случаев он более удобочитаем.

7 голосов
/ 20 июня 2009

Я не знаю, есть ли какая-нибудь задача Ant для git (я немного гуглил безуспешно), в любом случае Ant может обновить файл свойств с помощью опции Петра (git rev-parse HEAD), а затем во время выполнения использовать эти свойства, чтобы получить номер ревизии. Это чище и IDE дружественно , чем Ant, генерирующий файл .java.

3 голосов
/ 16 марта 2012

Я написал задачу Ant для получения номера сборки с использованием JGit API (без приложения командной строки git), см. jgit-buildnumber-ant-task . Затем вы можете сохранить этот номер сборки в файле MANIFEST.MF и получить его из пути к классам во время выполнения.

2 голосов
/ 19 июня 2018

Если это поможет кому-то еще. Я знаю, что ваш ANT

Для MAVEN сборки вы, вероятно, можете использовать git-commit-id-plugin в вашем 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 для получения дополнительной информации.

2 голосов
/ 20 июня 2009

Во-первых, вы можете использовать ident gitattribute с ключевым словом $Id$ (хотя это, вероятно, не то, что вам нужно; это хеш содержимого файла, и он не имеет ничего общего с текущей версией проекта) .

Во-вторых, вы можете сделать это так, как это делают ядро ​​Linux и сам Git: в Makefile (в вашем случае: в файле Ant) есть правило, которое заменяет некоторый заполнитель, обычно '@@ VERSION @@' (но в случае Perl это '++ VERSION ++') в результате GIT-VERSION-GEN , который, в свою очередь, использует " git description " . Но для того, чтобы это было полезно, вы должны отмечать свои релизы (используя аннотированные / подписанные теги).

2 голосов
/ 20 июня 2009

git rev-parse HEAD напечатает то, что вы, вероятно, хотите (например, идентификатор HEAD commit). Вы можете заставить ant сгенерировать простой класс Java с этим идентификатором в качестве статической константы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...