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钩子控制代码的提交的更多相关文章

  1. Maven项目配置tomcat插件实现项目自动部署到远程服务器

    1.tomcat配置 在tomcat目录中的conf目录下找到tomcat-users.xml配置文件,然后搜索tomcat-users,进行tomcat用户的角色和权限配置,如下: <tomc ...

  2. maven项目配置使用jdk1.8进行编译的插件

    在使用Maven插件编译Maven项目的时候报了这样一个错:[Java source1.5不支持diamond运算符,请使用source 7或更高版本以启用diamond运算符],这里记录下出现这个错 ...

  3. Jenkins 配置GitLab插件和Git插件

    本文演示如何在安装完Jenkins之后,配置GitLab插件和Git插件. 1 安装插件 浏览器登录Jenkins Web UI,点击系统管理,再点击管理插件,切换到可选插件,分别搜索GitLab P ...

  4. Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置

    Maven安装配置及其插件m2e(Eclipse Indigo 和 MyEclipse8.5)的安装配置   系统:Windows7 使用软件: Maven3.0.3 + Eclipse Indigo ...

  5. 干货!Jenkins下配置findbugs、pmd及checkstyle实现代码自动检测

    配置前提: 对于maven项目来说,需要在pom.xml文件的<build><plugins>添加配置</plugins></build> 网上有些地方 ...

  6. Jenkins 配置 FindBugs,Checkstyle,PMD 实现代码的静态检查 (14)

    一.插件介绍 FindBugs:静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题.利用这个工具,就可以在不实际运行程序的情况对软件进行分析.它可以帮助改进代码的 ...

  7. 利用Git钩子实现代码发布

    目录 1.什么是git钩子 2.安装一个钩子 3.常用的钩子脚本类型 3.1 客户端钩子 3.1.1 pre-commit 3.1.2 prepare-commit-msg 3.1.3 commit- ...

  8. maven项目添加findbugs,checkstyle,jacoco,assembly,maven-jar-plugin插件的配置

    (1)名称解释(插件的作用) findbugs:检测代码的不明显的语法错误.例如:用了==去比较字符串,定义了没有用的变量-- checkstyle:检测代码的格式规范.例如:方法没有写注释,类的命名 ...

  9. 【IDEA】本地新建Maven项目+配置Git和GitHub+代码上传和拉取到GitHub+其他IDEA和GitHub实战

    一.本地新建Maven项目并启动成功 1. 按照IDEA提供的模板,构建一个maven webapp的模板项目. 一路Next,到最后的finish.如下图. 2. 新建Tomcat,启动刚建立的项目 ...

随机推荐

  1. lua中产生 1 - n 之间不重复随机数

    local function GetRandomNumList(len) local rsList = {} ,len do table.insert(rsList,i) end local num, ...

  2. 最简单的TTcpServer与TTcpClient通信实例-Delphi

    unit TcpSCDemo;//最简单的TTcpServer与TTcpClient通信实例-Delphi //Borland推出TTcpServer与TTcpClient作为主要的网络通信控件,意味 ...

  3. 雷林鹏分享:XML 简介

    XML 简介 XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. 应该掌握的基础知识 在您继续学习之前,需要对以下知识有基本的了解: HTML JavaScript 如果您希望首先学习 ...

  4. 雷林鹏分享:C# 判断

    C# 判断 判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的). 下面是大多数编程语言中典型的判断结构的一般形式: 判断语句 C ...

  5. LeetCode--005--最长回文子串(java)

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  6. linux文件管理之查找

    1 文件查找 1.1 which 查找可执行文件的路径which是通过 PATH环境变量到该路径内查找可执行文件,所以基本的功能是寻找可执行文件[root@www ~]# which [-a] com ...

  7. 20181013xlVba计算优秀率及合格率

    Sub 计算高一优秀合格率() Dim Wb As Workbook Dim Sht As Worksheet Dim oSht As Worksheet Dim dOs As Object 'Out ...

  8. PaaS平台型IT运维&运营模式能给企业带来什么?

    关注嘉为科技,获取运维新知 什么是PaaS平台型IT自动化运维&运营模式 PaaS平台型IT运维和运维模式是指:将通用的运维能力与具体的运维场景解耦合,将能够复用的,具备独立功能的通用能力纳入 ...

  9. NYOJ - 整数划分(四)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=746 要求对一个n的整数插入m个乘号,求最大结果. 构造dp:dp[i][j]表示枚举至j ...

  10. Confluence 6 空间的权限是附加的

    空间的权限是附加的.如果一个用户以个人的方式或者以一个用户组成员的方式赋予了权限,Confluence 将会把这些权限合并在一起.  下面是这个概念的示例... Sasha 是 confluence- ...