一:问题背景

最近在研究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

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

  1. 如何在IDEA的maven项目中连接并使用MySQL8.0

    首先看一下我的基本的开发环境: 操作系统:MacOS 10.13.5 编辑器:IDEA 2018.3 其他:MySQL8.0.15.Maven 3.3.9.JDK 1.8 好,下面就正式开始: 第一步 ...

  2. maven项目中配置mvn源

    在pom.xml中配置 <repositories> <!--for others--> <repository> <id>alimaven</i ...

  3. 两张图让git新手在项目中运用git命令行

    创建分支命令:    git branch (branchname) 切换分支命令:      git checkout (branchname) 当你切换分支的时候,Git 会用该分支的最后提交的快 ...

  4. Nuxt项目中通过ESlint命令行修复格式问题

    在package.json文件中, 往往会有个类似于 "lint": "eslint --ext .js,.vue --ignore-path .gitignore .& ...

  5. maven项目中利用jmeter-maven-plugin插件直接执行jmeter jmx脚本

    jmeter脚本需要执行脚本,先得下载jmeter并解压jmeter.如想在maven项目中通过mvn install 直接执行jmx文件,这样就能在测试服务器上通过一个命令就能执行下性能测试了,给自 ...

  6. IDEA的maven项目中 静态文件编译的问题

    IDEA的maven项目中,默认源代码目录下的xml等资源文件并不会在编译的时候一块打包进classes文件夹,而是直接舍弃掉. 如果使用的是Eclipse,Eclipse的src目录下的xml等资源 ...

  7. IDEA的maven项目中静态文件编译的路径问题(未测试)

    转自:http://www.cnblogs.com/signheart/p/6625126.html IDEA的maven项目中,默认源代码目录下的xml等资源文件并不会在编译的时候一块打包进clas ...

  8. 如何在maven项目中使用spring

    今天开始在maven项目下加入spring. 边学习边截图. 在这个过程中我新建了一个hellospring的项目.于是乎从这个项目出发开始研究如何在maven项目中使用spring.鉴于网上的学习资 ...

  9. kubernetes下jenkins实战maven项目编译构建

    关于kubernetes环境的jenkins集群 在kubernetes环境部署的jenkins集群,执行任务时会新建pod,任务完成后pod被销毁,架构如下所示: 在kubernetes搭建jenk ...

随机推荐

  1. 单元测试er——为什么真的真的要写单元测试

    优点 为什么很多技术或者知识要说优点?因为有些道理看着很简单,大家表面上都觉得对,但是做的时候又不去做或者做不到.其中有一个很重要原因是骨子里或者潜意识并没有真实觉得这是对的,一旦想去做的时候同时会冒 ...

  2. 【Python】 汉字转化汉语拼音pinyin

    pinyin pinyin模块是github上一个小项目,在github.com/cleverdeng/pinyin.py上面可以下到源码.衷心感谢那些为这个模块做出贡献的人来方便我们[鞠躬] 安装: ...

  3. 云计算 --> 技术原理

    云计算技术原理 云计算分为IaaS.PaaS和SaaS三种类型,不同的厂家又提供了不同的解决方案,目前还没有一个统一的技术体系结构,下图是一个供商榷的云计算体系结构如下,它概括了不同解决方案的主要特征 ...

  4. 斑马ZPL指令加入如换行、回车等控制符的方法

    在程序中可能会被过滤掉,直接在指令中加入ASCII对应的16进制字符即可解决改问题, 语法:_十六进制(ASCII) 栗子:hello_0D_0Aworld  换行 扫描结果: hello world

  5. Java NIO系列教程(六) 多路复用器Selector

    多路复用器Selector是Java NIO编程的基础,熟练地掌握Selector对于掌握NIO编程至关重要.多路复用器提供选择已经就绪的任务的能力.简单来讲,Selector会不断地轮询注册在其上的 ...

  6. Java基础学习笔记十九 IO

    File IO概述 回想之前写过的程序,数据都是在内存中,一旦程序运行结束,这些数据都没有了,等下次再想使用这些数据,可是已经没有了.那怎么办呢?能不能把运算完的数据都保存下来,下次程序启动的时候,再 ...

  7. Vim配置及使用技巧

    要说Linux下比较好用的文本编辑器,我推荐vim(当然很多人都用emacs,可我没用过),用vim也有一年左右,有些心得体会想与诸位分享.在我的学习过程中,借鉴了不少优秀的博客,其中有csdn大神n ...

  8. 1013团队alpha冲刺日志集合帖

    alpha冲刺day1 alpha冲刺day2 alpha冲刺day3 alpha冲刺day4 alpha冲刺day5 alpha冲刺day6 alpha冲刺day7 alpha冲刺day8 alph ...

  9. win7开启wifi

    在启用本地共享连接时,出现的错误! 我已经建了一个无线临时网络,来启用共享用来上网的!Internet连接共享访问被启用时,出现了一个错误(null)?而且这错误也会在系统日志里留下记录,都是些莫名其 ...

  10. ios中录音功能的实现AudioSession的使用

    这个星期我完成了一个具有基本录音和回放的功能,一开始也不知道从何入手,也查找了很多相关的资料.与此同时,我也学会了很多关于音频方面的东西,这也对后面的录音配置有一定的帮助.其中参照了<iPhon ...