在我的项目的根目录中是pom.xml和.git。我的 maven pom.xml 看起来像:
<profile>
<id>git</id>
<activation>
<file>
<exists>.git</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>7.0.0</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
<phase>validate</phase>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
</configuration>
</plugin>
</plugins>
</build>
</profile>
从控制台输出中,我可以看到它以这种方式运行一次,但是尝试在清单中设置它的子 jar 最终会得到:“${git.commit.id.abbrev}”逐字。
虽然我可以每次为每个项目运行它,但我想运行一次。
这可能吗?
使用配置文件是错误的方法。该插件将处理所有需要的情况。另外,设置
dotGitDirectory
是不必要的,也没有用,这是插件的默认设置。这违反了配置范式的约定。
首先通过
pluginManagement
定义插件的版本和基本配置,如下所示:
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<version>7.0.0</version>
<configuration>
<runOnlyOnce>true</runOnlyOnce>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<commitIdGenerationMode>full</commitIdGenerationMode>
</configuration>
</plugin>
</plugins>
</pluginManagement>
如果需要,某些配置部分可能会更改
generateGitPropertiesFile
也许?
runOnlyOnce
部分是多模块构建中的重要部分,这意味着插件本身将仅执行一次以读取Git信息,并且仅在根级别(其中.git
目录can be found). If you don't set that to
true`它将尝试读取每个子项中不必要的 git 信息(可以工作,但浪费时间;仅在您可能使用 git 子模块/子树的情况下可能需要)。
接下来重要的事情是将插件绑定到生命周期。这必须在
plugins
部分(不在插件管理中)完成,如下所示:
<build>
<plugins>
..
<plugin>
<groupId>io.github.git-commit-id</groupId>
<artifactId>git-commit-id-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>revision</goal>
</goals>
</execution>
</executions>
</plugin>
</plugin>
...
</plugins>
</build>
插件本身默认绑定到
initialize
阶段,因此不需要自己定义阶段。