Git Revision Logging in Java mit Maven

Unsere Firma wechselte von mercurial zu Git , woraufhin ich herausfinden musste, wie wir zuvor Informationen über den Bereitstellungszweig im Protokoll angezeigt und unter git neu geschrieben haben. Vielleicht wird in Zukunft jemand mit dem gleichen Problem konfrontiert sein, da Git immer beliebter wird und viele Unternehmen dazu migrieren.

Mein Ziel ist es, Ihnen zu zeigen, wie Sie mit Hilfe mehrerer Maven-Plugins den Namen des Zweigs und den Commit-Hash von Git in das Protokoll Ihres Java-Programms ausgeben können. Dies ist hilfreich beim Analysieren von Protokollen, wenn Sie schon lange keine Bereitstellung mehr hatten und der Verlauf Ihres CI-Tools gelöscht wurde.

Starten Sie


In meinem Beispiel verwende ich: Java, Maven, Spring-Core, Git. Link zu einem Beispiel . Angenommen, wir haben bereits ein Projekt in Java geschrieben und verwenden Maven, um es zu erstellen. Es ist auch auf GitHub gespeichert .

Bild


Maven SCM


Damit maven auf Ihr Repository zugreifen kann, müssen Sie ihm die Methoden und Verbindungspfade mitteilen. Verwenden Sie dazu maven scm :

...
	
	scm:git:https://github.com//.gitscm:git:https://github.com//.gitHEADhttps://github.com//.git
...

Der Link für den Zugriff wird auf der Git-Webseite Ihres Projekts im Abschnitt Schnelleinrichtung erstellt. Weitere Informationen zur Verwendung von scm und Optionen für den Zugriff auf das Repository finden Sie hier und hier .

Informationen über den aktuellen Git-Zweig erhalten


Als nächstes müssen wir das Maven-Plugin buildnumber-maven-plugin hinzufügen , das buildNumber - den Hash des Commits und scmBranch - den Namen des Zweigs bildet.

org.codehaus.mojobuildnumber-maven-plugin1.4validatecreatefalsefalse

BuildNumber und scmBranch werden in der Validierungsphase generiert , die nach der Bereinigung in Maven erfolgt.

Parameter:

  • doCheck - Wenn true, wird das Projekt nicht kompiliert, solange lokale Änderungen vorliegen
  • doUpdate - Ermöglicht Maven, Ihre aktuelle Version zu aktualisieren

Mehr Infos dazu .

Mit Eigenschaften arbeiten


Danach können Sie Ihrer application.properties- Datei ohne Bedenken die folgenden Variablen hinzufügen : $ {buildNumber} und $ {scmBranch}

Ich habe beispielsweise application.properties die folgenden Parameter hinzugefügt:

branch.name=${scmBranch}
commit.hash=${buildNumber}
application.version=${project.version}

Damit unsere application.properties gefunden werden, müssen Sie im Build- Tag Folgendes hinzufügen:
src/main/resourcestrue


Projektmontage


Lassen Sie uns nun unser Projekt mit dem Team zusammenstellen:

mvn clean install -DskipTests

Wenn Sie sich das Protokoll ansehen, das maven während des Builds für Sie angezeigt hat, werden Sie feststellen, dass es den Befehl git ausführt, um die benötigten Daten abzurufen:

[INFO] --- buildnumber-maven-plugin:1.4:create (default) @ GitRevision ---
[INFO] Executing: /bin/sh -c cd '/home//Development/GitRevision' && 'git' 'rev-parse' '--verify' 'HEAD'
[INFO] Working directory: /home//Development/GitRevision
[INFO] Storing buildNumber: 47c0d1df153b8610392d51d1a7fa0b7b39716e09 at timestamp: 1474375934082
[INFO] Storing buildScmBranch: master

Sie können auch die Richtigkeit der empfangenen Daten im Ordner target / classes in der Datei application.properties überprüfen :

Bild

Inhalt:

branch.name=master
commit.hash=47c0d1df153b8610392d51d1a7fa0b7b39716e09
application.version=0.0.1-SNAPSHOT


Hinzufügen zum Protokoll


Um Eigenschaften in einer Klasse abzurufen , mit der spring arbeitet, wird die Annotation @Value verwendet .

Ein Beispiel:

public class LoggerExampleImpl implements LoggerExample {
    private static final Logger log = LoggerFactory.getLogger(LoggerExampleImpl.class);
    @Value("${branch.name}")
    private String branchName;
    @Value("${commit.hash}")
    private String commitHash;
    @Value("${application.version}")
    private String version;
    public void printLog() {
        log.info("Project version: {}, git branch: {}, commit hash: {}",
                version, branchName, commitHash);
    }
}

Eine Beispielklasse mit der Hauptmethode:


public class GitRevisionApplication {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
		LoggerExample loggerExample = context.getBean(LoggerExampleImpl.class);
		loggerExample.printLog();
	}
}

Wenn wir unser Programm ausführen, erhalten wir:

2016-09-20 17:06:07 INFO  [main] ClassPathXmlApplicationContext:581 - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@66cd51c3: startup date [Tue Sep 20 17:06:07 EEST 2016]; root of context hierarchy
2016-09-20 17:06:07 INFO  [main] XmlBeanDefinitionReader:317 - Loading XML bean definitions from class path resource [spring.xml]
2016-09-20 17:06:07 INFO  [main] PropertyPlaceholderConfigurer:172 - Loading properties file from URL [file:/home/rado/Development/GitRevision/target/classes/application.properties]
2016-09-20 17:06:08 INFO  [main] LoggerExampleImpl:25 - Project version: 0.0.1-SNAPSHOT, git branch: master, commit hash: 52c05227fb27271314d80d39b5026193ff310f04

Hash-Reduzierung


Der Hash unseres Commits ist zu lang, um ihn abzuschneiden. Sie müssen im Build-Number-Maven-Plugin die maximale Anzahl der auszugebenden Zeichen angeben :

5

Erweitern Sie git mit MANIFEST.MF-Daten


Es ist möglich, diese Daten zu MANIFEST.MF hinzuzufügen. Dazu müssen wir ein anderes Maven-Plugin anschließen: Maven-Jar-Plugin .

org.apache.maven.pluginsmaven-jar-plugin2.3.1truetrue${project.version}-${buildNumber}${scmBranch}com.habrahabr.example.GitRevisionApplication

Nach dem Zusammenbau unseres Projekts können wir in MANIFEST.MF sehen :

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: rado
Build-Jdk: 1.8.0_102
Specification-Title: GitRevision
Specification-Version: 0.0.1-SNAPSHOT
Implementation-Title: GitRevision
Implementation-Vendor-Id: com.habrahabr.example
Implementation-Build: master
Implementation-Version: 0.0.1-SNAPSHOT-47c0d1df153b8610392d51d1a7fa0b7
 b39716e09
Main-Class: com.habrahabr.example.GitRevisionApplication

Vielen Dank. Ich hoffe dieser Artikel ist hilfreich.

Jetzt auch beliebt: