场景
项目发布中,不同客户很多时候是由分支来管理的,但同时也存在很多用标准产品的客户,就会出现同一个分支不同时间的代码出现在不同的客户那边。
但是在发布很久之后可能需要修复某个 bug,这时候是不需要部署最新代码的(避免出现新问题),所以要找到当时发布时那个节点的代码,对应修复部署即可。
之前的做法是在发布的时候,打个 tag,但有时候容易忘记,并且也会导致 tag 太多混乱
解决办法
git-commit-id-maven-plugin 插件
找到一款叫做 git-commit-id-maven-plugin 的插件,可以很方便的将当前编译的时间、分支信息加入到文件中,使用方法也很简单。
github 主页:https://github.com/git-commit-id/git-commit-id-maven-plugin
pom.xml 集成插件
注意,这里的 groupId 和 artifactId 会根据 jdk 版本不同而有不同的写法,下面这种写法是 jdk8 的写法,具体请参考 github 中的使用方法
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>4.0.5</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
<phase>initialize</phase>
</execution>
</executions>
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
<generateGitPropertiesFilename>${project.build.outputDirectory}/com/buidinfo.txt</generateGitPropertiesFilename>
<commitIdGenerationMode>full</commitIdGenerationMode>
</configuration>
</plugin>
这样,在 maven 编译的时候,就会在对应的目录下写入 git 信息,如图:
这样的话,后续就能很方便的知道这次代码是什么编译的,什么时候更新的了。
集成到 IDEA 的 Tomcat 插件中
日常使用 IDEA 来开发的话,也可以配置到 tomcat 插件中。
-
在 pom 配置完后后,刷新下 maven 工具栏,就会出现对应的插件方法:
-
编辑 Tomcat 配置,在构建前的步骤中,增加一个步骤:
Run Maven Goal
。这么做是因为这个插件是绑定的 maven 的生命周期的,而 IDEA 的自带的
Build
步骤不是通过maven 来实现的,所以启动 Tomcat 的时候不能触发 maven 的 compile
另外一种做法是,将 IDEA 的编译步骤代理给 maven https://www.jetbrains.com/help/idea/delegate-build-and-run-actions-to-maven.html#delegate_to_maven -
运行命令为:
git-commit-id:revision
,并且将这个步骤放到 Build 和发布之间,顺序不能出错。
至此,这个需求完成,因为这个是老项目,经常更新的就只有 com 代码包,所以这个 buildinfo.txt 文件我是放到了 com 目录中,可以在 pom.xml 中修改文件位置