我们需要在maven构建中使用git分支和commit哈希.
有没有一种简单的方法让git自动维护一个带有我们需要的信息的“git.properties”文件,以便它始终反映git的当前状态?
如果可能的话,我们希望这是一个与平台无关的解决方案
最佳答案 注意(2016年,但实际上是在2011年9月创建的),有一个maven插件专门用于捕获属性文件中的
Git信息.
它是
ktoso/maven-git-commit-id-plugin一个.
<dependency>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.1</version>
</dependency>
然后:
<plugins>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.1</version>
<executions>
<phase>initialize</phase>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
</configuration>
</plugin>
</plugins>
在您的情况下,由于您“在Maven构建过程中很早就需要此信息”,因此我添加了< phase> initialize< / phase>为了在默认的jar maven生命周期中尽早触发它.
然后我在执行插件时使用它,以便打印与Git相关的调试数据,这有助于了解该插件的确切版本.
Properties prop = new Properties();
ClassLoader loader = Thread.currentThread().getContextClassLoader();
InputStream stream = loader.getResourceAsStream("git.properties");
if (stream != null) {
prop.load(stream);
String dirty = prop.getProperty("git.dirty");
if (dirty.equals("false")) {
dirty = "";
} else {
dirty = "(dirty)";
}
ver = ver + prop.getProperty("git.build.version")+dirty;
ver = ver + " - " + prop.getProperty("git.commit.id.describe");
ver = ver + " - " + prop.getProperty("git.build.time");
} else {
throw new MojoFailureException("Unable to find MyProject git.properties");
}