The Master Class of "Learn Spring Security" is out:
1. Overview
In this tutorial, we’re going to show how to inject Git repository information into a Maven-built Spring Boot-based application.
In order to do this we will use maven-git-commit-id-plugin – a handy tool created solely for this purpose.
2. Maven Dependencies
Let’s add a plugin to a <plugins> section of our pom.xml file of our project:
<plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-plugin</artifactId> <version>2.2.1</version> </plugin>
You can find the latest version here. Keep in mind that this plugin requires at least 3.1.1 version of Maven.
3. Configuration
The plugin has many convenient flags and attributes which expands its functionality. In this section we are going to briefly describe some of them. If you want to get to know all of them, visit maven-git-commit-id-plugin’s page, and if you want to go straight to the example, go to section 4.
The following snippets contain examples of plugin attributes; specify them in a <configuration></configuration> section according to your needs.
3.1. Missing Repository
You can configure it to omit errors if Git repository has not been found:
<failOnNoGitDirectory>false</failOnNoGitDirectory>
3.2. Git Repository Location
If you want to specify custom .git repository location, use dotGitDirectory attribute:
<dotGitDirectory>${project.basedir}/submodule_directory/.git</dotGitDirectory>
3.3. Output File
In order to generate properties file with a custom name and/or directory, use following section:
<generateGitPropertiesFilename> ${project.build.outputDirectory}/filename.properties </generateGitPropertiesFilename>
3.4. Verbosity
For more generous logging use:
<verbose>true</verbose>
3.5. Properties File Generation
You can turn off creation of a git.properties file:
<generateGitPropertiesFile>false</generateGitPropertiesFile>
3.6. Properties’ Prefix
If you want to specify a custom property prefix, use:
<prefix>git</prefix>
3.7. Only For Parent Repository
When working with project with submodules, setting this flag makes sure, that plugin works only for parent repository:
<runOnlyOnce>true</runOnlyOnce>
3.8. Properties Exclusion
You might want to exclude some sensitive data like repository user info:
<excludeProperties> <excludeProperty>git.user.*</excludeProperty> </excludeProperties>
3.9. Properties Inclusion
Including only specified data is also possible:
<includeOnlyProperties> <includeOnlyProperty>git.commit.id</includeOnlyProperty> </includeOnlyProperties>
4. Sample Application
Let’s create a sample REST controller, which will return basic information about our project.
We will create sample app using Spring Boot. If you don’t know how to set up a Spring Boot application, please see the introductory article: Configure a Spring Boot Web Application.
Our app will consist of 2 classes: Application and CommitIdController
4.1. Application
CommitIdApplication will serve as a root of our application:
@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; } }
Besides configuring the root of out application, we created PropertyPlaceHolderConfigurer bean so that we are able to access properties file generated by the plugin.
We also set some flags, so that application would run smoothly even if Spring could not resolve the git.properties file.
4.2. Controller
@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<String, String> getCommitId() { Map<String, String> result = new HashMap<>(); result.put("Commit message",commitMessage); result.put("Commit branch", branch); result.put("Commit id", commitId); return result; } }
As you can see we are injecting Git properties into class fields.
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
<plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-plugin</artifactId> <version>2.2.1</version> </plugin>
As you can see the plugin provides basic functionality “out of the box” and any additional configuration is optional. Generated properties file can be found under the default target/classes/ directory.
Remember to perform a Maven build before running the application, so that plugin can generate properties file.
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. Conclusion
In this tutorial we showed the basic of using maven-git-commit-id-plugin and created a simple Spring Boot application, which makes use of properties generated by the plugin.
Presented configuration does not cover all available flags and attributes, but it covers all basics necessary to start working with this plugin.
You can find code examples on Github.