git-hooks之pre-commit maven应用

一、前言

公司一直要求各团队集成sonar检查,且之前也整理过如何通过Jenkins自动构建sonar任务,以及如何在eclipse等IDE本地提前分析sonar问题的文章,但终归需要有一定的管理成本来持续保障其效果。所以近期研究了一下王凯之前发布的几篇帖子,并使用本地化的一个项目实践了一下git-hooks中的pre-commit钩子,可以在提交代码时强制校验本地代码质量,若不符合指定规则则不允许提交,期望减少一些持续性且重复的管理成本,在这里给大家分享一下,供有需要的小伙伴参考。

二、正文

2.1、极简配置说明(不想看详细介绍的直接参考本段进行配置即可)

2.1.1、pom.xml配置

pom.xml中增加配置

	<properties>
		<maven.compiler.source>${java.version}</maven.compiler.source>
		<maven.compiler.target>${java.version}</maven.compiler.target>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
		<!-- MyBatis -->
		<spring-boot-starter-mybatis-mapper.version>1.1.5</spring-boot-starter-mybatis-mapper.version>

		<!-- git hook -->
		<disable.checks>false</disable.checks>
		<spotbugs-maven-plugin.version>3.1.11</spotbugs-maven-plugin.version>
		<githook-maven-plugin.version>1.0.4</githook-maven-plugin.version>

		<!--<editor-fold desc="PMD">-->
		<pmd-maven-plugin.version>3.8</pmd-maven-plugin.version>
		<p3c-pmd.version>1.3.6</p3c-pmd.version>
	</properties>

	...

	<build>
		<!-- 省略项目配置 -->
		<plugins>
			<!-- 省略项目配置 -->

			<!-- git-commit begin -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-pmd-plugin</artifactId>
				<version>${pmd-maven-plugin.version}</version>
				<configuration>
					<skip>${disable.checks}</skip>
					<sourceEncoding>${project.build.sourceEncoding}</sourceEncoding>
					<targetJdk>${java.version}</targetJdk>
					<printFailingErrors>true</printFailingErrors>
					<rulesets>
						<ruleset>rulesets/java/ali-comment.xml</ruleset>
						<ruleset>rulesets/java/ali-concurrent.xml</ruleset>
						<ruleset>rulesets/java/ali-constant.xml</ruleset>
						<ruleset>rulesets/java/ali-exception.xml</ruleset>
						<ruleset>rulesets/java/ali-flowcontrol.xml</ruleset>
						<ruleset>rulesets/java/ali-naming.xml</ruleset>
						<ruleset>rulesets/java/ali-oop.xml</ruleset>
						<ruleset>rulesets/java/ali-orm.xml</ruleset>
						<ruleset>rulesets/java/ali-other.xml</ruleset>
						<ruleset>rulesets/java/ali-set.xml</ruleset>
					</rulesets>
					<printFailingErrors>true</printFailingErrors>
					<!--扫描级别,小于等于这个级别的错误代码将不通过扫描。不配默认是5(这里不推荐使用默认的,否则任何一个规则校验不通过都不允许提交,推荐配置成1,否则可能会出现经常因不满足规则校验而无法提交的情况->当然也可以重新梳理一下规则配置,自定义本团队的规则级别)-->
					<minimumPriority>1</minimumPriority>
				</configuration>
				<executions>
					<execution>
						<id>pmd-check-verify</id>
						<phase>verify</phase>
						<goals>
							<goal>check</goal>
						</goals>
					</execution>
					<execution>
						<id>pmd-pmd-site</id>
						<phase>site</phase>
						<goals>
							<goal>pmd</goal>
						</goals>
					</execution>
				</executions>
				<dependencies>
					<dependency>
						<groupId>com.alibaba.p3c</groupId>
						<artifactId>p3c-pmd</artifactId>
						<version>${p3c-pmd.version}</version>
					</dependency>
				</dependencies>
			</plugin>
			<!-- 代码检查工具有很多,是否同时启用阿里巴巴的检查规范和spotbugs看各自需要 -->
			<!--
			<plugin>
				<groupId>com.github.spotbugs</groupId>
				<artifactId>spotbugs-maven-plugin</artifactId>
				<version>${spotbugs-maven-plugin.version}</version>
				<executions>
					<execution>
						<id>spotbugs-check-verify</id>
						<phase>verify</phase>
						<goals>
							<goal>check</goal>
						</goals>
					</execution>
					<execution>
						<id>spotbugs-spotbugs-site</id>
						<phase>site</phase>
						<goals>
							<goal>spotbugs</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<skip>${disable.checks}</skip>
				</configuration>
				<dependencies>
					<dependency>
						<groupId>com.github.spotbugs</groupId>
						<artifactId>spotbugs</artifactId>
						<version>4.0.0-beta1</version>
					</dependency>
				</dependencies>
			</plugin>
			-->
			<plugin>
				<groupId>io.github.phillipuniverse</groupId>
				<artifactId>githook-maven-plugin</artifactId>
				<version>1.0.4</version>
				<executions>
					<execution>
						<goals>
							<goal>install</goal>
						</goals>
						<configuration>
							<hooks>
								<!-- 注意这里是调用shell命令去执行mvn命令,默认生成的hook文件执行路径可能与项目的pom.xml文件不一致,所以我这里用`-f`重新指定了本项目的pom文件路径 -->
								<pre-commit>
									echo running validation build
									exec mvn clean install -f 40_source//你的项目文件夹//pom.xml
								</pre-commit>
							</hooks>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<!-- git-commit end -->
		</plugins>
	
	...

	<!-- 在pom的根节点project下面增加以下配置(用于友好的显示错误提示) -->
	<reporting>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jxr-plugin</artifactId>
				<version>3.0.0</version>
			</plugin>
		</plugins>
	</reporting>

2.1.2、编译项目

在这里插入图片描述

直接在pom.xml所在路径执行mvn clean compile

2.1.3、确认git-hook脚本成功生成

确认项目根路径\.git\hooks\pre-commit脚本存在(注意文件没有后缀名,默认有一些.sample的文件是模板,默认是不生效的,只有去掉后缀才会生效)

在这里插入图片描述
确认脚本中的命令都可以正常执行

好了,可以开始使用你的git hook了

2.2、maven集成及使用

2.2.1、组件集成

参考2.1.1、pom.xml配置修改pom.xml文件即可

2.2.2、组件使用

在这里插入图片描述
在这里插入图片描述

首次配置完毕需要使用maven构建一下项目(可以执行mvn clean compile),生成git-hooks中的pre-commit命令
在这里插入图片描述
每次执行git的commit命令时都会先调用pre-commit这个文件的命令,配合我们的组件检查代码质量,如果检查不通过则会返回非0,提交不成功(注意各自项目的pom.xml文件路径,我这里写的是我自己项目的相对路径,如果不一样需要各项目组自行修改)

2.2.3、结果验证

在这里插入图片描述
保证项目中有不符合条件的代码,且符合不通过的级别校验,并尝试使用命令提交,可以看到代码校验失败了(其实直接使用mvn clean compile命令也可以看到相同的错误,但只有在git-hook中报错才会影响git命令,因为其退出码不是0,不符合git-hook的退出条件了)

在这里插入图片描述
可以使用git status确认,变更未提交成功

在这里插入图片描述
我们调整一下级别,只校验最严重级别的规则(需要确保本地没有级别为1的规则校验不通过代码,否则依然会失败)

在这里插入图片描述
成功提交

2.3、IDEA集成及使用

2.3.1、组件集成

在这里插入图片描述
在这里插入图片描述
在IDEA的File->Settings->Plugins->Marketplace中分别搜索并安装Alibaba Java Coding GuidelinesPMDPlugin(后者非必须,这两个可以单独校验代码质量,本文中用的是阿里的规则,所以第一个组件校验已经满足工作需要了)

2.3.2、组件使用

在这里插入图片描述
可以在上图位置中切换中英文

在这里插入图片描述
在项目上右键选择Alibaba Coding Guidelines Analyze中文是编码规约,快捷键为Ctrl+Alt+Shift+J

在这里插入图片描述
在窗口中查看检查结果,并逐个修复问题

在这里插入图片描述

可以自行调整规则生效策略

2.3.3、结果验证

在这里插入图片描述
确保项目存在不通过校验的代码,并尝试提交

在这里插入图片描述
这里可以看到提交失败,可以查看具体错误提示,我们修改校验级别为1后重试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改后再次尝试提交,从控制台及提交记录来看我们确实提交成功了

三、结语

工具毕竟是工具,能做的也只是辅助我们做一些工作,所以核心还是让大家识别到哪些代码不应该写或不能写,然后从编码之初就要规避。
因为增加了提交前的代码检查,所以提交周期会比原来要长,大项目提交前的代码检查可能都需要很久,所以大家应尽量保证提交前已经使用本地工具检查过且都符合规则了,否则反复尝试提交的时间损耗也是很可观的。至于效率和规范如何平衡则需要各团队自行控制了。

四、参考资料

扩展阿里巴巴Java开发规约插件 https://juejin.im/post/6844904114497781768

自定义-Git-Git-钩子 https://git-scm.com/book/zh/v2/%E8%87%AA%E5%AE%9A%E4%B9%89-Git-Git-%E9%92%A9%E5%AD%90

eclipse配置sonarLint https://blog.csdn.net/leandzgc/article/details/103036738

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: git-commit-lint-vscode是一个用于在VSCode编辑器中进行Git提交消息规范检查的工具。在软件开发过程中,良好的提交消息规范可以提高团队协作效率,方便代码版本追踪和维护。 该工具的主要功能是对Git提交消息进行自动检查,以确保它们符合预定义的规范。它会根据事先定义好的规则,对提交消息进行语法、格式和内容等方面的检查,并给出相应的错误或警告提示。这有助于保持项目提交消息的一致性和准确性。 git-commit-lint-vscode可以在VSCode的编辑器中直接集成,使开发者可以在提交代码时即时检查提交消息,避免出现格式错误、无意义或不清晰的消息。这样做不但可以提高团队协作效率,还可以减少代码维护中由于提交消息造成的困惑和不必要的麻烦。 使用这个工具,可以定义自己项目所需的提交消息规范,如消息长度、格式、命名约定等等。开发者只需要按照规范进行提交消息的编写,工具就会自动进行检查和提示。这样做可以使开发者更加专注于代码本身,而不必担心提交消息的错误或不规范。 总而言之,git-commit-lint-vscode是一个方便的工具,可以帮助开发者在VSCode编辑器中进行Git提交消息规范的检查。通过提供实时的错误和警告提示,它有助于保持项目提交消息的一致性和准确性,提高团队协作效率,减少代码维护中的问题。 ### 回答2: git-commit-lint-vscode是一个用于在VSCode中进行Git提交信息规范检查的插件。 Git提交信息是开发过程中非常重要的一部分,它不仅包含了开发者的改动内容,还包含了一些必要的描述和其他信息。一个良好的Git提交信息规范能够提高代码的可读性,方便团队协作和代码维护。 git-commit-lint-vscode插件是为了帮助开发者在VSCode中更好地遵守Git提交信息规范而设计的。它会通过检查你的提交信息,并根据预定义的规则给予提示和建议。 这个插件可以配置一些常见的规则,比如提交信息的格式、长度、语法等。当你在提交代码时,它会在VSCode的编辑器中给出相应的错误或警告提示,帮助你及时发现并修复不规范的提交信息。 除了简单的格式和语法检查,git-commit-lint-vscode还支持自定义规则的配置。你可以根据团队的开发规范,添加一些额外的规则来检查特定的提交信息要求。 使用git-commit-lint-vscode插件可以帮助团队统一和规范Git提交信息的格式,避免不规范的提交信息对代码维护和合作造成不必要的困扰。同时,它也能帮助开发者养成良好的提交信息习惯,提高自己的编码质量。 综上所述,git-commit-lint-vscode是一个实用的插件,它通过在VSCode中检查和提醒开发者规范Git提交信息,提升团队的协作效率和代码质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值