背景
在软件包中添加代码版本信息是许多组织使用的管理技巧。
这些信息在很多场景中可以发挥重要作用。
对于一些尚处于混沌状态的萌芽组织来说,这些信息几乎可以在排障过程中发挥灯塔的作用。
组织管理不善会引发很多“人祸”。
软件包覆盖版本发布?代码分支管理方法混乱?代码 tag 覆盖打?系统出了问题,不知道软件包是哪个分支、哪次提交构建的?
一个真实的项目
该项目基于 git 管理代码版本。
之前一直是通过自研的 CI 系统构建;
此 CI 系统会自动获取当前所构建代码的 git 信息,写入文件,添加到最终构建出的软件包中。
后来因为某些外部非技术原因,需要在另一套系统中构建软件包。
为了让最终的软件包包含相关 git 信息,就使用了 Maven 插件 git-commit-id-plugin。
快速使用 git-commit-id-plugin
此 Maven 插件可以从代码目录中的 .git 目录获取相关信息,写入文件。
该文件可以在Maven打包(package)过程中被包含到 jar 包内。
为了方便获取信息,我们可以开放一个接口来呈现此信息文件中的内容。如,一个 HTTP API。
配置 git-commit-id-plugin
在工程的 POM 文件中添加对此插件的引用,并添加一些自定义的配置。
(通常是在程序入口所在 jar包 的 POM 中配置。)
以下示例只是一种常用的快速配置样例,它使用了很多默认值。
如:生成的 git 信息文件路径为:${project.build.outputDirectory}/git.properties
可参考官方文档实现自定义配置。
<project> ... <build> ... <plugins> ... <plugin> <groupId>pl.project13.maven</groupId> <artifactId>git-commit-id-plugin</artifactId> <version>3.0.1</version> <configuration> <generateGitPropertiesFile>true</generateGitPropertiesFile> <includeOnlyProperties> <includeOnlyProperty>^git.branch$</includeOnlyProperty> <includeOnlyProperty>^git.commit.id$</includeOnlyProperty> <includeOnlyProperty>^git.dirty$</includeOnlyProperty> <includeOnlyProperty>^git.build.time$</includeOnlyProperty> </includeOnlyProperties> </configuration> </plugin> </plugins> </build> </project>
添加信息获取接口
上述软件包中的 git 信息获取/发布方式可以有多种实现方案。此处仅提供一种常见的 HTTP API 方式:
@RestController public class InfoController { @GetMapping("/git_info") public String getGitInfo() throws Exception { // 直接将 git 信息文件的内容返回给客户端 return IOUtils.toString(new URI("classpath:git.properties"), StandardCharsets.UTF_8); } }
相关推荐
maven git commit id plugin git-commit-id-plugin is a plugin quite similar to ...I had to quickly develop an git version of such a plugin. For those who don't know the previous plugins, it basically ...
git commit id插件与https://fisheye.codehaus.org/browse/mojo/tags/buildNumber-maven-plugin-1.0-beta-4非常相似,但是作为buildNumber,在我启动这个插件时,它只支持cvs和svn,必须做些什么。
git commit id插件与https://fisheye.codehaus.org/browse/mojo/tags/buildNumber-maven-plugin-1.0-beta-4非常相似,但是作为buildNumber,在我启动这个插件时,它只支持cvs和svn,必须做些什么。
git-commit-id-plugin是一个与插件非常相似的,但是作为我启动该插件时的Build Number插件,该插件仅支持CVS和SVN,因此必须完成一些工作。 我必须快速开发此类插件的Git版本。 对于那些不了解插件的人,它基本上...
一个Maven插件,可自动将代码格式化程序部署为pre-commit git挂钩。 提交后,挂钩将自动格式化暂存的Java文件。 在2.x和3.x之间进行重大更改 google-java-format 1.8。 插件支持的最低运行时版本为JDK 11。 在1.x和...
代码状态用法该插件根据您定义的规则删除您的git commit消息。 它基本上是从git存储库中读取提交消息,并将其与您提供的Regex匹配,然后根据您的规则添加每个捕获组。 < plugin> < groupId>ga.rugal.maven...
提交前Maven插件 用于Maven插件 是用于管理Git存储库中的提交挂钩的框架。 它使使用提交挂钩更加容易,但是存在一个问题。 它要求开发人员在其系统上安装二进制文件,然后通过运行pre-commit install --install-...
标题 "maven-ipojo-plugin-1.11.1.zip" 提供的信息表明这是一个与Maven相关的插件,具体是Apache iPOJO的Maven插件,版本为1.11.1。Apache iPOJO是Apache Felix项目的一个子项目,它提供了一种在Java应用程序中声明...
这个 Gradle 插件可用于为基于 Git 的项目生成git.properties文件(类似于 maven git commit id 插件)。 它可用于(但不限于)Spring Boot 应用程序。 插件可从。 Idea - @lievendoclo,最初发表在文章。 兼容性...
maven-plugin` 是一个专门针对 Maven 构建工具设计的插件,它能够根据项目的源代码管理(Source Code Management, SCM)系统中的分支、变更集(比如 Git 的提交ID)以及当前构建的时间戳,自动生成唯一的版本标识符...
完成配置后,开发者需要执行Maven构建过程,git-commit-id-plugin插件会在构建过程中执行,并在控制台输出Git版本信息。完成构建后,应用的/info端点将能输出包含Git版本信息的响应内容,这对于开发者来说可以非常...
### Svn Git Maven版本管理教程知识点详解 #### 一、版本控制系统概述 版本控制系统(Version Control System, VCS)是一种记录一个或若干个文件内容变化的系统,以便将来查阅特定版本修订情况。版本控制系统在软件...
可以通过Maven的插件(如`git-commit-id-plugin`)自动读取Git的信息(如分支名称、提交ID等),并在构建过程中记录相关信息。 - **SVN**:虽然SVN不如Git流行,但在某些组织中仍然被广泛使用。Maven同样支持SVN,...
git-commit-id-plugin docker-maven-plugin Maven资源插件 奥瑟斯 昂首阔步 Rabbitmq Mybatis 快速开始 要求 在计算机上运行此示例的要求如下。 Maven的3.5.0 Java 8 Docker 1.13.1 Docker撰写1.10.0 克隆并...
4. **插件使用**:如maven-compiler-plugin用于编译,maven-surefire-plugin用于测试,maven-jar-plugin用于打包,以及如何配置插件参数。 5. **C/C++与Java集成**:通过JNI在Java项目中调用C/C++代码,或者使用...
3. 版本控制:使用`git add`添加改动,`git commit`提交改动,并附带描述性提交消息。 4. 分支管理:为了实现特性隔离或修复错误,可以创建并切换分支(`git branch`和`git checkout`)。 5. 集成:使用`git merge`...
而`gradle-android-appiconoverlay`是一款针对Android Gradle项目的插件,其主要功能是将当前git commit SHA1信息自动覆盖到应用程序图标上,以创建独一无二的调试版本图标,便于区分不同构建阶段的APK。这一功能...
2 个这样的工具是 Maven 和 Gradle 的插件。 建造 jDocBook Core 使用 Gradle ( ) 作为它的构建工具。 以下是获取有关 Gradle 的更多信息的资源列表: Gradle 用户指南: : Gradle DSL 指南: : 其他 Hibernate/...
此外,`semver-gradle`还可以与其他Gradle插件如JAR打包、Maven发布等无缝集成,确保发布的软件包带有正确的版本信息。这对于开源项目和企业内部项目都是至关重要的,因为它能让用户和开发者快速了解软件的变化情况...
我 们都知道在Git 中想要过滤掉一些不想提交的文件,可以把相应的文件添加到.gitignore 中,而.gitignore 这个Android Studio 插件根据不同的语言来选择模板,就不用自己在费事添加一些文件了,而且还有自动补全功能...