如何在jenkins的maven项目中,用mvn命令行指定findbugs的黑名单规则文件

转载 2018年04月17日 15:04:27

一:问题背景

最近在研究jenkins的过程中,针对maven项目,打算添加findbugs进行静态检查,但我不太想在项目的pom中进行修改,最好可以只修改jenkins的job配置,即配置外部化。

 

我发现:在jenkins安装了findbugs插件后,只需要按照如下配置:

1.配置maven的goal

2.配置构建后发布Findbugs分析结果

 

保存后,点击立即构建,即可正常生成报告,如下:

3.问题出现

因为我也是看了网上的很多文章,很多都说需要在pom文件里的build和report中配置findbugs插件。

但配置经过我这样的实测,证明并不需要如此。唯一需要做的就是:如上图所示,在maven的goal中添加findbugs:findbugs即可。

但是,我们项目组有自己的要求,比如某些findbugs的错误不需要检查那么,我要怎么样才能指定,哪些错误需要检查,哪些错误不需要检查呢?

 

二:解决方案尝试

1.普遍做法

 我首先用搜索引擎查找了几篇,没找到我想要的,网上的做法都是:

在项目的pom中指定规则文件的位置:

在pom文件的同级,放置excludeFilterFile(该文件中的规则不需要检查)

复制代码
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.1</version>

                <configuration>
                    <excludeFilterFile>custom-findbugs-include.xml</excludeFilterFile>
                    <!--<threshold>High</threshold>-->
                    <!--<threshold>Low</threshold>-->
                    <effort>Default</effort>
                    <findbugsXmlOutput>true</findbugsXmlOutput>
                    <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
                    <xmlOutput>true</xmlOutput>
                    <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
                </configuration>
            </plugin>
        </plugins>

    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.1</version>
                <configuration>
                    <xmlOutput>true</xmlOutput>
                    <!-- Optional directoryto put findbugs xdoc xml report -->
                    <!--<xmlOutputDirectory>target/site</xmlOutputDirectory>-->
                    <findbugsXmlOutput>true</findbugsXmlOutput>
                    <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
                </configuration>
            </plugin>
        </plugins>
    </reporting>
复制代码

 

经我试验,这样是可行的。但是不符合我的需求:我希望pom里面都是干干净净的,findbugs只配置在jenkins中,项目不需要进行任何配置

ok。继续搜索解决方案吧。

2.阅读插件官网的文档

Maven的findbugs插件的官网地址:https://gleclaire.github.io/findbugs-maven-plugin/

在这里面,查阅了findbugs:findbugs的文档,看看有哪些配置参数:

https://gleclaire.github.io/findbugs-maven-plugin/findbugs-mojo.html

此时,有了一点收获,在可选参数部分,看到如下参数,结合上面第一种解决方案的xml的配置,我几何可以认定,要找的就是这个参数:excludeFilterFile

 

ok。那么我们应该就它配置到jenkins里面的maven goal中就可以了吧。(我的pom文件和下面的custom-findbugs-include.xml同级,因此不需要指定路径)

 

然而,当我兴冲冲打开findbugs的报告,发现各种bug类型和之前相比,没有变化。

期间百思不得其解,不明白为什么在pom中指定就可以,在这里指定就不行。

试了很多方法,最后我觉得:或许是这个配置压根没生效。

 

3.验证猜想

生没生效,这个只能通过maven的debug日志来看了。于是我像上面的图那样,打开了debug日志。

-X -e

这一次,在debug日志的输出中,下图所示的位置,是空的(截图我打了码,因为我找不到之前的日志了。)

于是知道了问题的原因,果然是配置没生效。

为什么不生效呢,应该是我的配置方式不对。

接下来,我翻遍了baidu、google的前几页的结果,依然没有收获。查到的几乎都是传统方案,也就是在pom中指定。

 

4.问题解决

这期间,查搜索引擎无果,于是又上qq,加了两个群,提了问题。可是,没人回答。

这期间,我也顺便把这个maven插件的源码down了下来。导入到idea中,进行全局搜索:

 

终于,让我发现如下代码:

    @Parameter( property="findbugs.excludeFilterFile" )
    String excludeFilterFile

对java熟悉的人,应该很容易猜测:

这是个配置项,而key不是我之前猜测的excludeFilterFile,而是findbugs.excludeFilterFile

然后就简单了,我很愉快地在jenkins中修改了配置:

 

终于,问题得到了解决。

 

5.悬而未决的问题

这个excludeFilterFile类似于黑名单,那么白名单行不行呢,我按照源码:

@Parameter( property="findbugs.includeFilterFile" ) String includeFilterFile

将jenkins配置改成

 

并没有效果。这一点,打算后边再查。(当然,对我们组来说,黑名单,已经够了)

 

三、踩坑感言

其实这个问题,很奇怪,翻遍了搜索引擎都没结果,难道大家都没这个需求吗,不管怎么说,希望能帮助到有需要的人。

抽丝剥茧的过程,其实很快乐。

另外附上我随便写的custom-findbugs-include.xml文件(仅供测试用,规则是随便写的):

复制代码
<FindBugsFilter>
    <Match>
        <Bug pattern="DLS_DEAD_LOCAL_STORE"/>
    </Match>

    <Match>
        <Bug pattern="DM_BOXED_PRIMITIVE_FOR_PARSING"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_REP"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_REP2"/>
    </Match>

    <Match>
        <Bug pattern="ME_ENUM_FIELD_SETTER"/>
    </Match>
</FindBugsFilter>
复制代码

 

规则列表:

http://findbugs.sourceforge.net/bugDescriptions.html#BSHIFT_WRONG_ADD_PRIORITY

http://www.iyi5365.cn/
http://www.xgm6868.cn/
http://www.hfk7896.cn/
http://www.ngp3761.cn/
http://www.bwb3762.cn/
http://www.jbx0190.cn/
http://www.fvj9657.cn/
http://www.ife7579.cn/
http://www.zws1014.cn/
http://www.bou1446.cn/
http://www.xvn7640.cn/
http://www.zus2206.cn/
http://www.muu1638.cn/
http://www.sxw8975.cn/
http://www.tfu0259.cn/
http://www.sfi6595.cn/
http://www.jxb0956.cn/
http://www.dwk7340.cn/
http://www.zlq5247.cn/
http://www.tud8565.cn/
http://www.fsy9769.cn/
http://www.bin6562.cn/
http://www.xtz2685.cn/
http://www.wjm3484.cn/
http://www.itb0047.cn/
http://www.tuj3041.cn/
http://www.uzu8211.cn/
http://www.cte8448.cn/
http://www.ciw9360.cn/
http://www.fam2103.cn/
http://www.his6102.cn/
http://www.nrr1653.cn/
http://www.fyc7738.cn/
http://www.tqz4909.cn/
http://www.dfr2203.cn/
http://www.eno7779.cn/
http://www.ybj8747.cn/
http://www.ywb6045.cn/
http://www.xtl7183.cn/
http://www.rwi9374.cn/
http://www.gky0942.cn/
http://www.ice7855.cn/
http://www.koi7857.cn/
http://www.dmi4893.cn/
http://www.yxp3496.cn/
http://www.xkk9615.cn/
http://www.ixa0880.cn/
http://www.gfw0394.cn/
http://www.ucl3937.cn/
http://www.eqv5313.cn/
http://www.qyd5295.cn/
http://www.mau6270.cn/
http://www.ecc2991.cn/
http://www.qdj0796.cn/
http://www.sfx6922.cn/
http://www.huh0545.cn/
http://www.kgg2505.cn/

Jenkins+maven+findbugs对java代码进行静态代码分析

by 黄卫华 一、POM.xml的修改 1、  在build里面配置: 代码如下:                                                       ...
  • hwhua1986
  • hwhua1986
  • 2015-09-08 14:27:24
  • 4865

maven与findbugs的集成

今天用findbugs扫描项目,发现一个问题: MS_MUTABLE_ARRAY, Priority: High com.aa.bb.common.Constants.ARRAY_RUNNING_...
  • lxxc11
  • lxxc11
  • 2015-10-29 17:33:50
  • 1755

静态代码扫描——FindBugs自定义规则入门

阅读本文前,建议先了解一下FindBugs的介绍和使用方法。 准备工作由于FindBugs是分析编译后的class文件,也就是字节码文件。我们需要了解FindBugs底层的处理机制。根据FindBug...
  • oggboy
  • oggboy
  • 2016-07-06 17:46:34
  • 4312

maven集成与Jenkins构建 - 代码BUG分析工具FindBugs

ps: 架构师交流群(QQ群号 304287620) 步骤与上一篇几乎一致,除以下几点不同 maven集成与Jenkins构建 - 静态代码分析工具PMD 1 安装jenkins插件fin...
  • Jayron
  • Jayron
  • 2017-04-14 14:51:04
  • 640

定制 findbugs规则

 come from: http://www.51testing.com/html/97/13997-211893.html   Findbugs是著名的开源java静态代码分析工...
  • zm_21
  • zm_21
  • 2015-08-04 14:45:30
  • 3991

使用DOS命令创建一个基于Maven的Web项目

Maven环境安装好了以后,接下来就是创建Maven结构的项目。这里,我用DOS命令来创建一个基于Maven的Web项目。既然使用了DOS命令,那么肯定要先了解一下这些命令的含义。 命令如下: mvn...
  • u012660464
  • u012660464
  • 2016-11-14 15:47:27
  • 2137

使用Jenkins持续集成maven项目

使用Jenkins持续集成maven项目 码农女仆 2016-12-22 05:49 首先下载最新的Jenkins的war包,放在tomcat的webapps的目录下,然后运行,例...
  • guolong1983811
  • guolong1983811
  • 2017-03-01 23:43:57
  • 674

如何在eclipse中调试mvn项目

1 Run->Externel Tools->Externel Tools Configurations->Program
  • henu_qiuyu
  • henu_qiuyu
  • 2014-06-04 09:37:06
  • 1133

jenkins持续集成单元测试和findbugs问题解决方案

  • 2013年05月16日 13:44
  • 36KB
  • 下载

Jenkins中使用checkstyle, coverage, pmd, findbugs plugin

1. 安装启动Jenkins之后,在manage jenkins里,选择manage plugin,在available tab里面安装相关plugins FindBugs Plug-in This ...
  • cloud_ll
  • cloud_ll
  • 2014-01-16 20:10:47
  • 6581
收藏助手
不良信息举报
您举报文章:如何在jenkins的maven项目中,用mvn命令行指定findbugs的黑名单规则文件
举报原因:
原因补充:

(最多只允许输入30个字)