1、Sonar简介
Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以从七个维度检测代码质量,通过插件形式,可以支持包括java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy等等二十几种编程语言的代码质量管理与检测。
1.1.sonarQube能带来什么?
1.糟糕的复杂度分布
文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们,且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。
2.重复
显然程序中包含大量复制粘贴的代码是质量低下的sonar可以展示源码中重复严重的地方。
3.缺乏单元测试
sonar可以很方便地统计并展示单元测试覆盖率。
4.没有代码标准
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。
5.没有足够的或者过多的注释
没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降,而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。
6.潜在的bug
sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检测出潜在的bug。
7.糟糕的设计(原文Spaghetti Design,意大利面式设计)
A:通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系
B:可以检测自定义的架构规则
C:通过sonar可以管理第三方的jar包
D:可以利用LCOM4检测单个任务规则的应用情况
E:检测耦合
1.2.其它代码检测工具的对比
1.2.1.什么是静态代码分析
静态代码分析是指无需运行被测代码,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性,找出代码隐藏的错误和缺陷,如参数不匹配,有歧义的嵌套语句,错误的递归,非法计算,可能出现的空指针引用等等。
在软件开发过程中,静态代码分析往往先于动态测试之前进行,同时也可以作为制定动态测试用例的参考。统计证明,在整个软件开发生命周期中,30%
至 70% 的代码逻辑设计和编码缺陷是可以通过静态代码分析来发现和修复的。
但是,由于静态代码分析往往要求大量的时间消耗和相关知识的积累,因此对于软件开发团队来说,使用静态代码分析工具自动化执行代码检查和分析,能够极大地提高软件可靠性并节省软件开发和测试成本。
1.2.2.静态代码分析工具的优势
帮助程序开发人员自动执行静态代码分析,快速定位代码隐藏错误和缺陷。
帮助代码设计人员更专注于分析和解决代码设计缺陷。
显著减少在代码逐行检查上花费的时间,提高软件可靠性并节省软件开发和测试成本。
1.2.3.Java 静态代码分析理论基础和主要技术
缺陷模式匹配:缺陷模式匹配事先从代码分析经验中收集足够多的共性缺陷模式,将待分析代码与已有的共性缺陷模式进行模式匹配,从而完成软件的安全分析。这种方式的优点是简单方便,但是要求内置足够多缺陷模式,且容易产生误报。
类型推断:类型推断技术是指通过对代码中运算对象类型进行推理,从而保证代码中每条语句都针对正确的类型执行。这种技术首先将预定义一套类型机制,包括类
型等价、类型包含等推理规则,而后基于这一规则进行推理计算。类型推断可以检查代码中的类型错误,简单,高效,适合代码缺陷的快速检测。
模型检查:模型检验建立于有限状态自动机的概念基础之上,这一理论将被分析代码抽象为一个自动机系统,并且假设该系统是有限状态的、或者是可以通过抽象归
结为有限状态。模型检验过程中,首先将被分析代码中的每条语句产生的影响抽象为一个有限状态自动机的一个状态,而后通过分析有限状态机从而达到代码分析的
目的。模型检验主要适合检验程序并发等时序特性,但是对于数据值域数据类型等方面作用较弱。 数据流分析:数据流分析也是一种软件验证技术,这种技术通过收集代码中引用到的变量信息,从而分析变量在程序中的赋值、引用以及传递等情况。对数据流进行
分析可以确定变量的定义以及在代码中被引用的情况,同时还能够检查代码数据流异常,如引用在前赋值在后、只赋值无引用等。数据流分析主要适合检验程序中的
数据域特性。
1.2.4.CheckStyle
Checkstyle 是 SourceForge 的开源项目,通过检查对代码编码格式,命名约定,Javadoc,类设计等方面进行代码规范和风格的检查,从而有效约束开发人员更好地遵循代码编写规范。
Checkstyle 提供了支持大多数常见 IDE 的插件,文本主要使用 Eclipse 中的 Checkstyle
插件。如下图 1 所示,Checkstyle 对代码进行编码风格检查,并将检查结果显示在 Problems
视图中。图中,代码编辑器中每个放大镜图标表示一个 Checkstyle 找到的代码缺陷。开发人员可通过在
Problems 视图中查看错误或警告详细信息。
图 1. 使用 Checkstyle 进行编码风格检查
此外,Checkstyle 支持用户根据需求自定义代码检查规范,在下图 2 中的配置面板中,用户可以在已有检查规范如命名约定,Javadoc,块,类设计等方面的基础上添加或删除自定义检查规范。
图 2. 使用 Checkstyle 添加自定义代码检查规范
1.2.4.FindBugs
FindBugs 是由马里兰大学提供的一款开源 Java 静态代码分析工具。FindBugs 通过检查类文件或
JAR 文件,将字节码与一组缺陷模式进行对比从而发现代码缺陷,完成静态代码分析。FindBugs 既提供可视化
UI 界面,同时也可以作为 Eclipse 插件使用。文本将主要使用将 FindBugs 作为 Eclipse
插件。在安装成功后会在 eclipse 中增加 FindBugs perspective,用户可以对指定
Java 类或 JAR 文件运行 FindBugs,此时 FindBugs 会遍历指定文件,进行静态代码分析,并将代码分析结果显示在
FindBugs perspective 的 bugs explorer 中,如下图 3 所示:
图 3. 使用 FindBugs 进行静态代码分析
图中 Bug Explorer 中的灰色图标处为 Bug 类型,每种分类下红色图标表示 bug 较为严重,黄色的图标表示
bug 为警告程度。Propreties 列出了 bug 的描述信息及修改方案。
此外,FindBugs 还为用户提供定制 Bug Pattern 的功能。用户可以根据需求自定义 FindBugs
的代码检查条件,如下图 4 所示:
图 4. 使用 FindBugs 添加自定义代码检查规范
1.2.5.PMD
PMD 是由 DARPA 在 SourceForge 上发布的开源 Java 代码静态分析工具。PMD
通过其内置的编码规则对 Java 代码进行静态检查,主要包括对潜在的 bug,未使用的代码,重复的代码,循环体创建新对象等问题的检验。PMD
提供了和多种 Java IDE 的集成,例如 Eclipse,IDEA,NetBean 等。本文主要使用
PMD 以插件方式与 Eclipse 集成。如下图 5 所示:在 Violations Overview
视图中,按照代码缺陷严重性集中显示了 PMD 静态代码分析的结果。
图 5. 使用 PMD 进行静态代码分析
PMD 同样也支持开发人员对代码检查规范进行自定义配置。开发人员可以在下图 6 中的面板中添加、删除、导入、导出代码检查规范。
图 6. 使用 PMD 添加自定义代码检查规范
1.2.6.JTest
Jtest 是 Parasoft 公司推出的一款针对 Java 语言的自动化代码优化和测试工具,Jtest
的静态代码分析功能能够按照其内置的超过 800 条的 Java 编码规范自动检查并纠正这些隐蔽且难以修复的编码错误。同时,还支持用户自定义编码规则,帮助用户预防一些特殊用法的错误。Jtest
提供了基于 Eclipse 的插件安装。Jtest 支持开发人员对 Java 代码进行编码规范检查,并在
Jtask 窗口中集中显示检查结果,如下图 7 所示:
图 7. 使用 Jtest 进行静态代码分析
同时,Jtest 还提供了对用户定制代码检查配置甚至自定义编码规则的支持,这一功能使得开发人员可以基于不同场景定制所需要的编码规范,如图
8 所示:
图 8. 使用 Jtest 添加自定义代码检查规范
1.2.7.Alibaba Java Coding Guidelines
1.2.8.代码检测工具对比综述
Checkstyle:
Javadoc 注释:检查类及方法的 Javadoc 注释
命名约定:检查命名是否符合命名规范
标题:检查文件是否以某些行开头
Import 语句:检查 Import 语句是否符合定义规范
代码块大小,即检查类、方法等代码块的行数
空白:检查空白符,如 tab,回车符等
修饰符:修饰符号的检查,如修饰符的定义顺序
块:检查是否有空块或无效块
代码问题:检查重复代码,条件判断,魔数等问题
类设计:检查类的定义是否符合规范,如构造函数的定义等问题 |
FindBugs:
Bad practice 坏的实践:常见代码错误,用于静态代码检查时进行缺陷模式匹配
Correctness 可能导致错误的代码,如空指针引用等
国际化相关问题:如错误的字符串转换
可能受到的恶意攻击,如访问权限修饰符的定义等
多线程的正确性:如多线程编程时常见的同步,线程调度问题。
运行时性能问题:如由变量定义,方法调用导致的代码低效问题。 |
PMD:
可能的 Bugs:检查潜在代码错误,如空 try/catch/finally/switch 语句
未使用代码(Dead code):检查未使用的变量,参数,方法
复杂的表达式:检查不必要的 if 语句,可被 while 替代的 for 循环
重复的代码:检查重复的代码
循环体创建新对象:检查在循环体内实例化新对象
资源关闭:检查 Connect,Result,Statement 等资源使用之后是否被关闭掉 |
Jtest
可能的错误:如内存破坏、内存泄露、指针错误、库错误、逻辑错误和算法错误等
未使用代码:检查未使用的变量,参数,方法
初始化错误:内存分配错误、变量初始化错误、变量定义冲突
命名约定:检查命名是否符合命名规范
Javadoc 注释:检查类及方法的 Javadoc 注释
线程和同步:检验多线程编程时常见的同步,线程调度问题
国际化问题:
垃圾回收:检查变量及 JDBC 资源是否存在内存泄露隐患 |
错误检查能力
为比较上述 Java 静态分析工具的代码缺陷检测能力,本文将使用一段示例代码进行试验,示例代码中将涵盖我们开发中的几类常见错误,如引用操作、对象操作、表达式复杂化、数
组使用、未使用变量或代码段、资源回收、方法调用及代码设计几个方面。
2.SonarQube安装
2.1.准备工作
1、安装jdk1.8+
2、安装maven
3、安装mysql
这里使用mysql5.7,要注意的是要将mysql的max_allowed_packet设置成:256M,修改的位置是:
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini中的max_allowed_packet=256M
4、下载sonarqube和sonarqube-scanner
下载地址是:http://www.sonarqube.org
/downloads/
sonarqub e https://sonarsource.bintray.com/ Distribution/sonarqube/sonarqube-6.7.1.zip
SonarQube+Scanner https://sonarsource.bintray.com/
Distribution/ sonar-scanner-cli/sonar -scanner-cli-3.0.3.778.zip |
5、Linux下安装zip工具
如果Linux上没有zip解压包,执行如下命令:
2.2.数据库配置
mysql>
CREATE DATABASE sonar DEFAULT CHARACTER SET utf8
COLLATE utf8_general_ci;
Query OK, 1 row affected (0.00 sec)
mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
Query OK, 0 rows affected (0.10 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'%'
IDENTIFIED BY 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost'
IDENTIFIED BY 'sonar';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
mysql> |
2.3.创建Linux用户和配置权限
一般情况下,开发者不能直接使用root用户来管理和使用系统,最好通过一个专有的root用户来管理和使用系统,最好通过一个专有用户来进行操作,因此我们新建一个用户qube(这里要特别注意,不然下面启动sonarqube会报错),具体命令如下:
adduser
qube
qube用户的密码设置为:123456
passwd qube,然后输入密码:123456
|
如果需要,给qube用户sudu权限:
[root@localhost
logs]# vim /etc/sudoers
|
修改内容:
截图如下:
添加好用户后,就可以使用该账号登录进行安装和配置sonarqube了。
2.4.SonarQube安装
2.4.1.解压
使用qube用户将sonarqube-6.7.1.zip上传到/home/qube,解压sonarqube.zip
cd
/home/qube
unzip sonarqube-6.7.1.zip
mv sonarqube-6.7.1 sonarqube |
解压之后,发现目录结构如下(注意:用户是qube):
[qube@localhost
sonarqube]# pwd
/home/qube/sonarqube
[qube@localhost sonarqube]# ll
total 12
drwxr-xr-x 8 qube qube 130 Dec 21 08:48 bin
drwxr-xr-x 2 qube qube 48 Jan 23 01:11 conf
-rw-r--r-- 1 qube qube 7651 Dec 21 08:37 COPYING |
2.4.2.放置mysql驱动包
cd
/home/qube/sonarqube/extensions/jdbc-driver
mkdir mysql
将mysql-connector-java-5.1.40.jar放入到里面,命令如下:
[qube@localhost mysql]# pwd
/home/qube/sonarqube/extensions/jdbc-driver/mysql
[qube@localhost mysql]# ls
mysql-connector-java-5.1.40.jar
[qube@localhost mysql]# |
同理:如果是使用oracle,在/home/qube/sonarqube/extensions/jdbc-driver下创建oracle目录,在oracle下放置oracle驱动包。
2.4.3.配置sonarqube
默认的端口号是:9000,上下文context路径是”/”,这些值可以在/home/qube/sonarqube/conf/sonar.properties的文件中进行修改
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url= jdbc:mysql://xxx.xxx.xxx.xxx:3306/sonar ?useUnicode =true&characterEncoding =utf8&rewriteBatchedStatements =true&useConfigs=maxPerformance& useSSL=false
下面是可以配置的参数。
#sonar.jdbc.maxActive=60
#sonar.jdbc.maxIdle=5
#sonar.jdbc.minIdle=2
#sonar.jdbc.maxWait=5000
#sonar.jdbc.minEvictableIdleTimeMillis=600000
#sonar.jdbc.timeBetweenEvictionRunsMillis=30000
注意:如果测试项目与服务器不在同一台机子,则需要添加服务器的IP:
#下面是ip地址
sonar.web.host=xxx.xxx.xxx.xxx
sonar.web.port=9000 |
2.4.4.sonar-scanner安装
解压sonar-scanner-cli-3.0.3.778.zip
unzip
sonar-scanner-cli-3.0.3.778.zip
|
将文件夹的名字改成sonar-scanner
mv
sonar-scanner-3.0.3.778-linux sonar-scanner
|
配置sonar-scanner,修改配置文件sonar-scanner.properties
cd
/home/qube/sonar-scanner/conf
vim sonar-scanner.properties
|
修改内容:
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:mysql://xxx.xxx.xxx.xxx:3306/ sonar?useUnicode= true&characterEncoding= utf8&rewriteBatchedStatements =true&useConfigs= maxPerformance
|
2.4.5.配置环境变量
在配置文件中加入
#set
sonar-quebe and sonar_runner_home
export SONAR_HOME=/home/qube/sonarqube
export SONAR_RUNNER_HOME= /home/qube/sonar-scanner
export PATH= $PATH:$SONAR_HOME/bin/linux-x86-64
:$SONAR_RUNNER_HOME/bin/ |
更新profile
source
/etc/profile 或 . /etc/profile
|
2.4.6.运行sonarqube
[qube@localhost
conf]# cd $SONAR_HOME/bin/linux-x86-64/
[qube@localhost linux-x86-64]# ls
lib sonar.sh wrapper
[qube@localhost linux-x86-64]# ./sonar.sh start
Starting SonarQube...
Started SonarQube.
[qube@localhost linux-x86-64]# |
关于sonar的启动,停止,重启服务
#./sonar.sh
start 启动服务
#./sonar.sh stop 停止服务
#./sonar.sh restart 重启服务 |
2.4.7.常见问题
注意:若开始不小心使用的root用户启动的,这时候再次用qube用户启动sonarqube的时候发现是启动不了的,这时候,需要将/home/qube/sonarqube/temp删除,然后再以qube用户启动才可以。
验证:在本地浏览器输入:http://服务器ip:9000/能打开页面即正常。(初次启动时间大概在2分钟左右)
如果运行错误,查看es.log错误显示
如果报:
2018.01.23
00:45:53 WARN es[] [o.e.b.BootstrapChecks] max virtual
memory areas vm.max_map_count [65530] is too low,
increase to at least [262144]
2018.01.23 00:45:57 INFO es[] [o.e.c.s.ClusterService]
new_master {sonarqube}{s6-B3S9wQceJImzwEtr4fA} {_Uwa6UAuToCvkGmAFyE6WA} {127.0.0.1} {127.0.0.1:9001}{rack_id=sonarqube},
reason: zen-disco-elected-as-master ([0] nodes joined)
2018.01.23 00:45:57 INFO es[][o.e.n.Node] started |
需要进行如下配置(root用户下进行如下操作):
[root@t-xi-sonar01
~]# vi /etc/sysctl.conf
#add sonar
vm.max_map_count = 262144
fs.file-max = 65536
[root@t-xi-sonar01 ~]# vi /etc/security/limits.conf
#add sonar
sonarqube - nofile 65536
sonarqube - nproc 2048
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 2048 |
并执行如下命令:
查看web.log日志内容,截图如下:
2.4.8.SonarQube运行效果
正常启动之后的效果图如下:
右上角有一个Login 点击输入admin / admin(这个是默认用户名和密码)之后,进入如下界面:
tuzq: c38f84132f725e1 720b78dc5f97ec30152727131
选择java,然后再选择Maven
通过上图可以看到sonar的命令示例是:
mvn
sonar:sonar \
-Dsonar.host.url=http://xxxxx:9000 \
-Dsonar.login=c38f84xxxxxxxxc5f97exxxx131 |
然后以root进入jenkins所在的下载的原码的位置,这里进入:
/root/.jenkins/workspace/xxxx/source |
执行上面的:
mvn
sonar:sonar \
-Dsonar.host.url=http://xxxx:9000 \
-Dsonar.login=c38f84132f725exxxx30152xxxx31 |
然后执行现象是会开始下载各种jar包
3.Sonar插件安装
3.1.插件安装
上面SonarQube是英文的,可以安装一个中文包(注意的是要找到对应的sonar版本的中文包才可以,否则将会报错)
中文插件包的下载地址:https://github.com/
SonarQubeCommunity/ sonar-l10n-zh>。下载源码包(若想使用指定版本的访问:https://github.com/
SonarQubeCommunity/sonar-l10n-zh/releases),然后上传到/home/qube下:
[qube@localhost
~] $ unzip sonar-l10n-zh-master.zip
Archive: sonar-l10n-zh-master.zip
e8b74fd144cd1b06cdf41 581183db14ca6c6269d
creating: sonar-l 10n-zh-master/
inflating: sonar-l 10n-zh-master/.gitignore
inflating: sonar-l 10n-zh-master/.sonarsource.properties
inflating: sonar-l 10n-zh-master/.travis.yml
inflating: sonar-l 10n-zh-master/README.md
creating: sonar-l 10n-zh-master/compare/ |
查看中文插件包中的目录结构:
[qube@localhost
sonar-l 10n-zh-master]$ pwd
/home/qube/sonar-l 10n-zh-master
[qube@localhost sonar-l 10n-zh-master]$ ll
total 8
drwxrwxr-x 4 qube qube 74 Feb 12 12:25 compare
-rw-rw-r-- 1 qube qube 3432 Feb 12 12:25 pom.xml
-rw-rw-r-- 1 qube qube 1143 Feb 12 12:25 README.md
drwxrwxr-x 4 qube qube 28 Feb 12 12:25 src
[qube@localhost sonar-l10n-zh-master]$ |
编译包,然后生成插件包:
编译完成之后,将sonar-l10n-zh-plugin-1.19.jar拷贝到/home/qube/sonarqube/
extensions/plugins中去:
[root@localhost
qube]# cd sonar-l10n-zh-master
[root@localhost target]# pwd
/home/qube/sonar-l10n-zh-master/target
[root@localhost sonar-l10n-zh-master]# ls
compare pom.xml README.md src
[root@localhost sonar- l10n-zh-master] # mvn clean
install package
[INFO] Scanning for projects...
sonar-l10n-zh-plugin-1.19.jar在/home/qube/ sonar-l10n-zh-master/target中 |
3.2.Sonar其它插件安装
登录SonarQube-?配置-?应用市场-?全部-?选择相应的插件进行安装
4.安装maven,与Jenkins集成
4.1.Mavne安装略
4.2.安装SonarQube Server的插件
进入”系统管理”?“插件管理”?“可选插件”,在新版本中是SonarQube Scanner for
Jenkins,老版本是:SonarQube Plugin
点击”直接安装”,安装完成后,在jenkins的”系统管理”?“系统设置”, 就会有SonarQube
servers的配置,截图如下:
点击:Add SonarQube.
在配置之前先生成token,生成方式是(若是英文的,路径地址是SonarQubeWeb->administrator->My
Account?security):
复制f0edf36afc1e0e26d1f95e2fb 1cb62217a02dffe,然后将它填写到下面的Server
authentication token中。
4.3.Jekins中配置sonarqube scanner
进入”系统管理“?“Global Tool Configuration”,配置SonarQube Scanner
4.4.Jenkins中配置新建质检项目
设置完成之后,点击保存。
上面的-X 表示进入Sonarqube的Dedug模式。
其中Analysis properties的内容可以参考如下:
sonar.projectKey=
youxuan_api_mavenProject3
# this is the name displayed in the SonarQube UI
sonar.projectName= youxuan_api_mavenProject3
sonar.projectVersion =2.0.0
sonar.sourceEncoding =UTF-8
sonar.language=java
# Path is relative to the sonar-project.properties
file. Replace "\" by "/" on
Windows.
# Since SonarQube 4.2, this property is optional
if sonar.modules is set.
# If not set, SonarQube starts looking for source
code from the directory containing
# the sonar -project.properties file.
sonar.sources=.
# Encoding of the source c ode. Default is default
system encoding
#sonar.sourceEncoding =UTF-8
sonar.java.binaries= /home/qube |
点击保存。
然后点击“立即构建”
如果构建过程中的出现以下现象。
可以看/home/qube/sonarqube/ logs/web.log,发现日志中报类似如下的:
Packet for query is too large (12238 >
1024). You can change this value
解决办法是下载mysql-installer -community-5.7.20.msi,然后安装完成后,修改
C:\ProgramData\MySQL
\MySQL Server 5.7\my.ini中的:
max_allowed_packet=256M |
然后重启MySQL,重启完成之后,将sonarqube中的数据库连接修改成刚刚的这个数据库的配置
5.查看项目质量检测结果
5.1.检测结果查看
登录Sonarqube,我们将看到执行结果,操作如下:
在本机输入http://服务器ip:9000/,填入用户名admin和密码admin后,我们将看在首页上就能看到检测结果
点击进去之后,可以看到结果:
点击bug,查看到的结果如下:
等。
5.2.常见错误
1.开启connection、IO流等对象时,try、catch一定要在finally里面关闭对象
2.indexOf()方法,里面应该使用单引号,而不是双引号
3.以后不使用System.out.print打印,而是用LOGGER对象打印日志,具体级别视情况而定
4.对象一定要判空
5.类的属性,一定要严格控制static静态、public等修饰符、final常量,常量用大写
6.重复的字符串,应该写一个常量将其封装起来
7.方法名不能太过复杂,提倡方法封装
8.注释问题,代码尽量不要注释,类、方法、属性都要加注释
9.StringBuffer少用,用StringBudder代替
10.要注意使用异常,Execption尽量不用,最好有一个异常的规范
11.用if语句是,要注意逻辑合理,能合并的都合并
12.password属性名的使用
6.idea中集成sonar
6.1.下载sonarLint
略
6.2.打开idea安装插件
A:将sonarLint放置在:D:\software\sonarqube \SonarLint-2.8.0.1731.zip
B:打开idea 》File》 Settings 》Plugins
C:重启idea-》idea》File》Settings》Other Settings-》SonarLint
General Settings》SonarQube Servers》右侧加号,配置sonar相关参数:
配置完成之后,在idea下有了sonarLint了,效果图如下:
|