maven项目配置findbugs插件 使用git钩子控制代码的提交
maven项目配置findbugs插件对代码进行静态检测
当发现代码有bug时,就不让用户commit代码到远程仓库里
没有bug时才可以commit到远程仓库中
(1)新建maven项目 ,配置findbugs插件
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.demo</groupId>
<artifactId>mvn_findbugs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mvn_findbugs</name>
<url>http://maven.apache.org</url> <build>
<finalName>mvn_findbugs</finalName>
<plugins>
<plugin>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>${compiler.source}</source>
<target>${compiler.target}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin> <!-- findbugs插件 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.4</version>
<configuration>
<!-- 设置分析工作的等级,可以为Min、Default和Max -->
<effort>Low</effort>
<!-- Low、Medium和High (Low最严格) -->
<threshold>Medium</threshold>
<failOnError>true</failOnError>
<includeTests>true</includeTests>
<!--findbugs需要忽略的错误的配置文件-->
<!-- <excludeFilterFile>compile.bat</excludeFilterFile> -->
</configuration>
<executions>
<execution>
<id>run-findbugs</id>
<!-- 在package 阶段触发执行findbugs检查,比如执行 mvn clean package -->
<phase>package</phase>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin> </plugins>
</build> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<compiler.source>1.7</compiler.source>
<compiler.target>1.7</compiler.target>
<junit.version>4.12</junit.version>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
ApplicationDemo.java (示例类)
package cn.demo.mvn_findbugs;
public class ApplicationDemo {
public static void main(String[] args){
System.out.println("Hello World @!!!");
}
public void add(){
//a.toString();
System.out.println("Hello World @!!!---------add () method");
}
}
ApplicationTest.java (测试类)
package cn.demo.mvn_findbugs; import static org.junit.Assert.*; import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test; public class ApplicationTest { @BeforeClass
public static void setUpBeforeClass() throws Exception {
System.out.println("Before()----------before");
} @AfterClass
public static void tearDownAfterClass() throws Exception {
System.out.println("After()----------after");
} @Test
public void testAdd() {
ApplicationDemo app = new ApplicationDemo();
app.add();
System.out.println("test()----------test---add");
} }
(2)将项目拷贝,粘贴到桌面 进入项目根目录 右击 git bush here 执行 git init命令,初始化
git bush here
git init

(3)使用cd命令打开 .git/hooks文件夹,创建pre-commit文件(没有后缀名的文件)
cd .git/hooks
vi pre-commit

(4)编辑pre-commit 文件,内容如下 (#所标识的内容表示注释,第一行除外)
#!/bin/sh
#command for test changed code
#echo "WELCOME IN HAHAHA "
#clean the program
#package the program,test the program
mvn clean package
result=$? #获取当前进程执行结果,mvn clean package命令 会根据maven findbugs的插件的配置执行package的时候 执行 findbugs:findbugs ,如果有bug会返回非0值,如果没有bug会返回0
echo $result
if [ $result -ne 0 ] #这里通过判断返回值来判断项目是否构建成功 -ne 表示不等于
then
mvn findbugs:gui #结果不等于0时,构建失败,打开findbugs的页面,让用户检查错误
echo "Regretful! BUILD FAILED"
exit 1 #返回非0结果值,表示提交失败
else
echo "Configuration! BUILD SUCCESS"
exit 0 #返回0结果值,表示提交成功 没有出现bug
fi
(5)将项目添加: git add .

(6)提交文件 : git commit -m "there is your descripe message"
执行第六步的时候,会自动调用 pre-commit 脚本,会执行脚本中的内容,根据脚本结果判定是否提交成功

中间还有一些输出的信息 省略了…………
从 Fork Value is true 这行开始执行findbugs:findbugs
BUILD SUCCESS :是构建结果 表示构建成功
所以下面的最后一圆圈圈起来的 0 ,就是脚本中的 result值,

出现以上这些就表示commit成功了
-----------------------------------------------------------------------------------------------------------------------------
****************************commit不成功的示例,修改java代码
ApplicationDemo.java (示例类,故意定义无用的变量 出bug)
package cn.demo.mvn_findbugs;
public class ApplicationDemo {
String a = null;
String b = new String();
String c = new String();
public static void main(String[] args){
System.out.println("Hello World123 @@@!!! there is no bugs");
}
public void add(){
System.out.println("Hello World @!!!---------add () method");
}
}
其他的配置都和上面保持一致
执行 git add .

然后执行 git commit -m "描述语句,there are some bugs in this demo"

前面的执行结果没什么差别,当执行findbugs:findbugs命令这里时:
Fork Value is true :开始执行findbugs
4:是出现的bug数目

中间省略一些输出信息…………
构建结果:BUILD FAILURE 表示构建失败
下面的小圈圈标识的数字 1 ,返回非0值,这就是shell脚本中的 result值,,构建失败

然后会执行if判断中的 findbugs:gui命令,自动打开浏览器,进入gui页面

看到 findbugs:gui页面,表示提交失败, 没有代码可以push到远程仓库
这就是findbugs插件控制代码提交的(正常/异常)流程了
maven项目配置findbugs插件 使用git钩子控制代码的提交的更多相关文章
- Maven项目配置tomcat插件实现项目自动部署到远程服务器
1.tomcat配置 在tomcat目录中的conf目录下找到tomcat-users.xml配置文件,然后搜索tomcat-users,进行tomcat用户的角色和权限配置,如下: <tomc ...
- maven项目配置使用jdk1.8进行编译的插件
在使用Maven插件编译Maven项目的时候报了这样一个错:[Java source1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符],这里记录下出现这个错 ...
- Jenkins 配置GitLab插件和Git插件
本文演示如何在安装完Jenkins之后,配置GitLab插件和Git插件. 1 安装插件 浏览器登录Jenkins Web UI,点击系统管理,再点击管理插件,切换到可选插件,分别搜索GitLab P ...
- Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置
Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置 系统:Windows7 使用软件: Maven3.0.3 + Eclipse Indigo ...
- 干货!Jenkins下配置findbugs、pmd及checkstyle实现代码自动检测
配置前提: 对于maven项目来说,需要在pom.xml文件的<build><plugins>添加配置</plugins></build> 网上有些地方 ...
- Jenkins 配置 FindBugs,Checkstyle,PMD 实现代码的静态检查 (14)
一.插件介绍 FindBugs:静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具,就可以在不实际运行程序的情况对软件进行分析.它可以帮助改进代码的 ...
- 利用Git钩子实现代码发布
目录 1.什么是git钩子 2.安装一个钩子 3.常用的钩子脚本类型 3.1 客户端钩子 3.1.1 pre-commit 3.1.2 prepare-commit-msg 3.1.3 commit- ...
- maven项目添加findbugs,checkstyle,jacoco,assembly,maven-jar-plugin插件的配置
(1)名称解释(插件的作用) findbugs:检测代码的不明显的语法错误.例如:用了==去比较字符串,定义了没有用的变量-- checkstyle:检测代码的格式规范.例如:方法没有写注释,类的命名 ...
- 【IDEA】本地新建Maven项目+配置Git和GitHub+代码上传和拉取到GitHub+其他IDEA和GitHub实战
一.本地新建Maven项目并启动成功 1. 按照IDEA提供的模板,构建一个maven webapp的模板项目. 一路Next,到最后的finish.如下图. 2. 新建Tomcat,启动刚建立的项目 ...
随机推荐
- 关于怎么在CSDN中修改代码行中字体的颜色
先吐槽一下自己的心路历程吧,自己现在也是在CSDN中发表了自己好几篇的原创博文,但每一篇博文自己总感觉怪怪的,就是说不出自己哪里有毛病呢,知道今天恍然大悟,原来自己的代码行真心丑的要死,没有呈现出在编 ...
- arcgis 浅入
首先声明,此文只是用于学习,非商业用途!!20181226谷子弟留 有朋友需要用arcgis来学习分析图块,实现图块的分类和数据分析和统计. 于是网上找了找资源. http://pan.baidu ...
- Processing 与 C 相同和不同的地方
Processing 与 C Processing 语言和其他语言有很多相似之处,这是它作为一种计算机语言的特征,同时,Processing 用于艺术创作,所以也有一些专用的函数. 相同的几点: 作为 ...
- 上传RNA-seq数据到NCBI GEO数据库
SRA - NCBI example - NCBI 要发文章了,审稿时编辑肯定会要求你上传NGS测序数据. 一般数据都是放在集群,不可能放在个人电脑上,因为有的数据大的吓人(几个T). 所以我们就建一 ...
- nginx ----> nginx配置/反向代理/负载均衡
nginx [engine x]是一个HTTP和反向代理服务器,一个邮件代理服务器和一个通用的TCP/UDP代理服务器,最初由Igor Sysoev编写. 环境: Ubuntu16.04 安装ngin ...
- 远程服务器返回了意外相应:(413) Request Entity Too Large。
在从客户端向WCF服务端传送较大数据(>65535B)的时候,发现程序直接从Reference的BeginInvoke跳到EndInvoke,没有进入服务端的Service实际逻辑中,怀疑是由于 ...
- 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39
如果你还在被HD钱包.BIP32.BIP44.BIP39搞的一头雾水,来看看这边文章吧. 数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥) ...
- Centos 6.5 搭建阿里云yum源
Linux系统下yum源配置(Centos 6) 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo ...
- 深拷贝的原生js实现
面试时被问到怎么实现深拷贝,想都没想就用var obj2=JSON.parse(JSON.stringify(obj1))来实现.但面试官却要我用循环写出来,那就只能用递归了.可惜当时一下子忘了判断是 ...
- 使用SetInterval时函数不能传参问题
无论是window.setTimeout还是window.setInterval,在使用函数名作为调用句柄时都不能带参数,而在许多场合必须要带参数,这就需要想方法解决.经网上查询后整理如下:例如对于函 ...