1. Übersicht
In diesem Tutorial zeigen wir, wie Git-Repository-Informationen in eine von Maven erstellte Spring Boot-basierte Anwendung eingefügt werden.
Zu diesem Zweck verwenden wir das maven-git-commit-id-Plugin - ein praktisches Tool, das ausschließlich für diesen Zweck erstellt wurde.
2. Maven-Abhängigkeiten
Fügen wir ein Plugin zu a hinzu Abschnitt unserer pom.xml- Datei unseres Projekts:
pl.project13.maven git-commit-id-plugin 2.2.1
Die neueste Version finden Sie hier. Beachten Sie, dass für dieses P lugin mindestens die Version 3.1.1 von Maven erforderlich ist.
3. Konfiguration
Das Plugin verfügt über viele praktische Flags und Attribute, die seine Funktionalität erweitern. In diesem Abschnitt werden wir einige davon kurz beschreiben. Wenn Sie alle kennenlernen möchten, besuchen Sie die Seite des maven-git-commit-id-plugins. Wenn Sie direkt zum Beispiel gehen möchten, fahren Sie mit Abschnitt 4 fort .
Die folgenden Snippets enthalten Beispiele für Plugin-Attribute. Geben Sie sie in a anAbschnitt nach Ihren Bedürfnissen.
3.1. Fehlendes Repository
Sie können es so konfigurieren, dass Fehler weggelassen werden, wenn das Git-Repository nicht gefunden wurde:
false
3.2. Speicherort des Git-Repositorys
Wenn Sie benutzerdefinierte angeben möchten .git Repositoryposition verwenden dotGitDirectory Attribut:
${project.basedir}/submodule_directory/.git
3.3. Ausgabedatei
Verwenden Sie den folgenden Abschnitt, um eine Eigenschaftendatei mit einem benutzerdefinierten Namen und / oder Verzeichnis zu generieren:
${project.build.outputDirectory}/filename.properties
3.4. Ausführlichkeit
Für eine großzügigere Protokollierung verwenden Sie:
true
3.5. Eigenschaften Dateierzeugung
Sie können die Erstellung einer git.properties- Datei deaktivieren :
false
3.6. Präfix der Eigenschaften
Wenn Sie ein benutzerdefiniertes Eigenschaftspräfix angeben möchten, verwenden Sie:
git
3.7. Nur für übergeordnetes Repository
Wenn Sie mit einem Projekt mit Submodulen arbeiten, stellen Sie durch Setzen dieses Flags sicher, dass das Plugin nur für das übergeordnete Repository funktioniert:
true
3.8. Ausschluss von Eigenschaften
Möglicherweise möchten Sie einige vertrauliche Daten wie Repository-Benutzerinformationen ausschließen:
git.user.*
3.9. Einbeziehung von Eigenschaften
Das Einbeziehen nur angegebener Daten ist ebenfalls möglich:
git.commit.id
4. Beispielanwendung
Erstellen wir einen Beispiel-REST-Controller, der grundlegende Informationen zu unserem Projekt zurückgibt.
Wir werden die Beispiel-App mit Spring Boot erstellen. Wenn Sie nicht wissen, wie Sie eine Spring Boot-Anwendung einrichten, lesen Sie bitte den Einführungsartikel: Konfigurieren einer Spring Boot-Webanwendung.
Unsere App besteht aus 2 Klassen: Application und CommitIdController
4.1. Anwendung
CommitIdApplication dient als Root unserer Anwendung:
@SpringBootApplication(scanBasePackages = { "com.baeldung.git" }) public class CommitIdApplication { public static void main(String[] args) { SpringApplication.run(CommitIdApplication.class, args); } @Bean public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() { PropertySourcesPlaceholderConfigurer propsConfig = new PropertySourcesPlaceholderConfigurer(); propsConfig.setLocation(new ClassPathResource("git.properties")); propsConfig.setIgnoreResourceNotFound(true); propsConfig.setIgnoreUnresolvablePlaceholders(true); return propsConfig; } }
Neben der Konfiguration des Stammverzeichnisses unserer Anwendung haben wir die PropertyPlaceHolderConfigurer- Bean erstellt, damit wir auf die vom Plugin generierte Eigenschaftendatei zugreifen können.
Wir haben auch einige Flags gesetzt, damit die Anwendung reibungslos ausgeführt wird, selbst wenn Spring die Datei git.properties nicht auflösen kann.
4.2. Regler
@RestController public class CommitInfoController { @Value("${git.commit.message.short}") private String commitMessage; @Value("${git.branch}") private String branch; @Value("${git.commit.id}") private String commitId; @RequestMapping("/commitId") public Map getCommitId() { Map result = new HashMap(); result.put("Commit message",commitMessage); result.put("Commit branch", branch); result.put("Commit id", commitId); return result; } }
Wie Sie sehen können, fügen wir Git-Eigenschaften in Klassenfelder ein.
To see all properties available refer to git.properties file or author's Github page. We also created a simple endpoint which, on HTTP GET request, will respond with a JSON containing injected values.
4.3. Maven Entry
We'll first set up the execution steps to be carried out by the plugin, plus any other configuration property that we consider useful:
pl.project13.maven git-commit-id-plugin 2.2.1 get-the-git-infos revision validate-the-git-infos validateRevision
In order for our code to work properly, we need to end up with a git.properties file in our classpath. To achieve this, we have two options.
The first one is to leave it up to the plugin to generate the file. We can specify this by setting the generateGitPropertiesFile configuration property a true value:
true
The second option is to include a git.properties file in the resources folder ourselves. We can include only the entries that we'll use in our project:
# git.properties git.tags=${git.tags} git.branch=${git.branch} git.dirty=${git.dirty} git.remote.origin.url=${git.remote.origin.url} git.commit.id=${git.commit.id} git.commit.id.abbrev=${git.commit.id.abbrev} git.commit.id.describe=${git.commit.id.describe} git.commit.id.describe-short=${git.commit.id.describe-short} git.commit.user.name=${git.commit.user.name} git.commit.user.email=${git.commit.user.email} git.commit.message.full=${git.commit.message.full} git.commit.message.short=${git.commit.message.short} git.commit.time=${git.commit.time} git.closest.tag.name=${git.closest.tag.name} git.closest.tag.commit.count=${git.closest.tag.commit.count} git.build.user.name=${git.build.user.name} git.build.user.email=${git.build.user.email} git.build.time=${git.build.time} git.build.host=${git.build.host} git.build.version=${git.build.version}
Maven will replace the placeholders with the appropriate values.
Note: Some IDEs don't work well with this plugin, and might throw a ‘circular placeholder reference' error on bootstrap when we define the properties as we did above.
After booting and requesting localhost:8080/commitId you can see a JSON file with a structure similar to the following:
{ "Commit id":"7adb64f1800f8a84c35fef9e5d15c10ab8ecffa6", "Commit branch":"commit_id_plugin", "Commit message":"Merge branch 'master' into commit_id_plugin" }
5. Integration With Spring Boot Actuator
You can use the plugin with Spring Actuator easily.
Wie Sie in der Dokumentation lesen können, GitInfoContributor holen git.properties , wenn Datei zur Verfügung. Bei der Standard-Plugin-Konfiguration werden Git-Informationen beim Aufrufen von / info endpoint zurückgegeben:
{ "git": { "branch": "commit_id_plugin", "commit": { "id": "7adb64f", "time": "2016-08-17T19:30:34+0200" } } }
6. Fazit
In diesem Tutorial haben wir die Grundlagen der Verwendung des maven-git-commit-id-Plugins gezeigt und eine einfache Spring Boot-Anwendung erstellt, die die vom Plugin generierten Eigenschaften verwendet.
Die vorgestellte Konfiguration deckt nicht alle verfügbaren Flags und Attribute ab, sondern alle Grundlagen, die für die Arbeit mit diesem Plugin erforderlich sind.
Codebeispiele finden Sie auf Github.