SonarQube配置自定义的CheckStyle代码规则
Posted yoyo008
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SonarQube配置自定义的CheckStyle代码规则相关的知识,希望对你有一定的参考价值。
原文地址:https://www.jianshu.com/p/ff1d800885ce
惯例第一步肯定是SonarQube的安装与运行配置了,但这部分不在本文主题内,网上一搜一大把,这里就不讲了,大家可以先看这篇文章:SonarQube的安装、配置与使用
。我们直接讲自定义CheckStyle代码规则的配置方法。
(注:不同的SonarQube版本可能略有不同,大家按线索来)
1、CheckStyle插件安装(熟悉的可跳过)
如图所示,在
应用市场
中搜索CheckStyle即可,搜索出来后,点击安装
按钮(我这里已经安装了,未安装的情况再卸载
按钮的地方会有安装
按钮),即可下载安装,安装过程中会有一次重启操作,大家按提示操作即可。(注:有些版本的SonarQube插件安装是在
配置
-系统
-更新中心
)
2、配置自定义的CheckStyle代码规则
配置自定义的CheckStyle代码规则,有两种方法,使用CheckStyle代码规则配置文件
和启用SonarQube中的CheckStyle相关代码规则
,下面一一介绍:
- 使用CheckStyle代码规则配置文件
注意:这种方法只有新建一个质量配置
时才能用,质量配置
创建好后,就不能利用配置文件来配置代码规则了。
按照上面两个图,填写好相关信息后,点击创建
按钮。这里有几个问题需要注意下:-
问题一 配置文件不能以
<?xml version="1.0" encoding="UTF-8"?>
开头,否则点击创建
按钮时会有如下错误提示:
因此要把此标签去掉,直接以<module>
标签开头,如下图所示: -
问题二 配置文件中不能有重复的规则,否则点击
创建
按钮时,会有报错提示,比如: -
问题三 配置文件中不能有
规则模板
(规则模板
后面介绍),当配置文件中有规则模板
,点击创建
按钮时,会有报错提示,比如:checkstyle:com.puppycrawl.tools.checkstyle.checks.coding.FinalLocalVariableCheck
不能被激活。这条规则是检测从未改变的局部变量是否添加final修饰词,那么如果我们需要添加这条规则,怎么处理呢?留到启用SonarQube中CheckStyle相关代码规则方法去说。
-
通过使用配置文件的方法配置自定义的CheckStyle代码规则,或多或少还会有其它问题,要根据提示处理配置文件。所以,一般情况下,不建议使用这种方法,事倍功半的说。╥﹏╥
-
启用SonarQube中CheckStyle相关代码规则
质量配置
中会显示SonarQube中所有已安装编程语言中创建好的规则配置(每个语言都有内置Sonar way
的默认配置),可见,刚刚创建的CheckStyle
配置中,通过文件已配置了18条规则,接下来我们再进行添加。点击配置名称,进入配置详情页:更多激活规则
资源库
的筛选,选中资源库
后,会列举出已安装的插件列表,选中CheckStyle
,页面中会筛选出CheckStyle的可配置规则(上图已经筛选好了,显示有136条可配置的规则)。接下来就可以对这136条规则进行配置了,细心的同学可能已经发现了,规则列表中的规则有两类:非模板规则(有
活动
按钮,无规则模板
的标签)和模板规则(无活动
按钮,有规则模板
的标签)。所以,我们也分两类讲:- 非模板规则
对于非模板规则,我们直接在规则列表中点击列表项的活动
按钮即可,在弹出的对话框中填写属性值,如下图所示: - 规则模板
对于规则模板,是没有直接的激活按钮的。那么规则模板怎么激活呢?且听下回分解……O(∩_∩)O哈哈~(玩笑脸)
规则模板,需要我们先根据模板创建一条规则,之后再激活创建的规则。接下来说步骤(以上文说的规则模板Final Local Variable
为例)-
- 点击
创建
按钮,弹出自定义规则创建框创建
按钮。
创建成功的规则如下图所示:活动
即可激活。其次,也可以在此页面点击自定义的规则名称,进入详情页编辑
、删除
、激活
等操作。
-
- 非模板规则
配置好后,可在配置详情页中点击CheckStyle
的链接,以XML的格式查看已配置好的规则,如下图所示:
以上是关于SonarQube配置自定义的CheckStyle代码规则的主要内容,如果未能解决你的问题,请参考以下文章
让 Checkstyle 自定义规则在 Hudson/Jenkins 中工作
如何在 Sonar Qube 7.8 中导入 google java checkstyle?