白盒测试工具 - sonar的安装、配置与使用入门手册,用sonar检查代码质量实战演示
安装过程主要分为两部分,一个是主程序 sonarqube,一个是 sonarScanner 插件,两个都安装配置好后就可以进行代码扫描了。sonarqube 在配置数据库的过程中会碰到很多问题,第二章专门针对这些问题来进行讲解。
第一章:sonarqube 的安装与启用
① sonarqube 获取
下载地址: 官方网站
② sonarqube 配置
解压后的程序目录下,进入 conf 里的 sonar.properties 来进行配置。
# 指定oracle数据库
sonar.jdbc.url=jdbc:oracle:thin:@10.10.18.70:1521/orcl
# 指定数据库用户名
sonar.jdbc.username=ncc_auto_sonar
# 指定数据库密码
sonar.jdbc.password=1
# 指定端口
sonar.web.port=9000
③ sonarqube 驱动放置
不要忘了把驱动放到
④ sonarqube 的启动
用 StartSonar 来启动程序,如果闪退了,可以拖到 cmd 里运行,可以看到报错信息,第二章就介绍它的一些常见报错的解决方法。
然后再访问 localhost:9000 就进来了。
第二章:sonarqube 报错解决
① Unsupported JDBC driver provider: mysql. 【sonarqube8.0 以后不支持 mysql】
sonarqube8.0 以后不再支持 mysql,所以我用 oracle 来做适配。
jvm 1 | WrapperSimpleApp: Encountered an error running main: org.sonar.proces
s.MessageException: Unsupported JDBC driver provider: mysql
jvm 1 | org.sonar.process.MessageException: Unsupported JDBC driver provider:
mysql
wrapper | <-- Wrapper Stopped
② Directory does not contain JDBC driver: extensions/jdbc-driver/oracle. 【没有找到驱动】
没有配置数据库驱动。extensions/jdbc-driver/oracle 下面没有放驱动,或是驱动放的不对。
jvm 1 | WrapperSimpleApp: Encountered an error running main: org.sonar.proces
s.MessageException: Directory does not contain JDBC driver: extensions/jdbc-driv
er/oracle
jvm 1 | org.sonar.process.MessageException: Directory does not contain JDBC d
river: extensions/jdbc-driver/oracle
wrapper | <-- Wrapper Stopped
③ SonarQube requires Java 11 to run. 【sonarqube8.0 需要 java11 的支持】
我原来用的版本是 java8 的。
运行时会提示要用 java11 来运行。
jvm 1 | WrapperSimpleApp: Encountered an error running main: java.lang.Illega
lStateException: SonarQube requires Java 11 to run
jvm 1 | java.lang.IllegalStateException: SonarQube requires Java 11 to run
安装完后配置环境变量后就可以了。
④ 远程主机强迫关闭了一个现有的连接。【sonarqube 数据库驱动版本不匹配】
报这个错感觉我的数据库驱动版本不对,然后换了个驱动就好了。
jvm 1 | 2020.05.22 17:25:35 WARN app[][o.e.t.TcpTransport] exception caught
on transport layer [Netty4TcpChannel{localAddress=/127.0.0.1:62245, remoteAddres
s=/127.0.0.1:9001}], closing connection
jvm 1 | java.io.IOException: 远程主机强迫关闭了一个现有的连接。
然后再访问 localhost:9000 就进来了。
⑤ 查看 sonarqube 的数据库支持
配置文档里有很多的帮助,我直接搜 oracle 就能查看 oracle 的支持了,还有下面说的驱动放置方法,以及更下面的官方支持网站,如果还有其它的问题,兴许就能在里面找到问题的解决方法。
第三章:sonarScanner 插件的安装与配置
① sonarScanner 获取
获取地址:官网下载 下载完后解压即可。
② sonarScanner 设置环境变量
我们把它根目录下面的 bin 文件夹加入环境变量。
cmd 里输入 sonar-scanner -h 可以看有没有配置对。
③ sonarScanner 配置
在这个配置文件夹里的配置文件进行配置。
还是跟前面 sonarqube 的数据库配置一样。
# 指定oracle数据库
sonar.jdbc.url=jdbc:oracle:thin:@10.10.18.70:1521/orcl
# 指定数据库用户名
sonar.jdbc.username=ncc_auto_sonar
# 指定数据库密码
sonar.jdbc.password=1
第四章:用 sonar 检查代码质量
① 配置
在要检查代码的地方建个这个配置文件 sonar-project.properties。
sonarScanner 官网 给的配置方法。
# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# --- optional properties ---
# defaults to project key
#sonar.projectName=My project
# defaults to 'not provided'
#sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Defaults to .
#sonar.sources=.
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8
② 运行
在放好配置文件的目录下输入 sonar-scanner 命令就可以扫描了。
扫描成功标志。
扫描过程详细信息。
C:UsersAdministratorDesktopXpathRobot>sonar-scanner
INFO: Scanner configuration file: D:serversonarsonar-scanner-4.3.0.2102-windo
wsbin..confsonar-scanner.properties
INFO: Project root configuration file: C:UsersAdministratorDesktopXpathRobot
sonar-project.properties
INFO: SonarScanner 4.3.0.2102
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Windows 7 6.1 amd64
INFO: User cache: C:UsersAdministrator.sonarcache
INFO: Scanner configuration file: D:serversonarsonar-scanner-4.3.0.2102-windo
wsbin..confsonar-scanner.properties
INFO: Project root configuration file: C:UsersAdministratorDesktopXpathRobot
sonar-project.properties
INFO: Analyzing on SonarQube server 8.2.0
INFO: Default locale: "zh_CN", source code encoding: "GBK" (analysis is platform
dependent)
INFO: Load global settings
INFO: Load global settings (done) | time=205ms
INFO: Server id: 02A721FB-AXJaPgmVryaM9Bas_OmF
INFO: User cache: C:UsersAdministrator.sonarcache
INFO: Load/download plugins
INFO: Load plugins index
INFO: Load plugins index (done) | time=161ms
INFO: Load/download plugins (done) | time=3743ms
INFO: Process project properties
INFO: Process project properties (done) | time=1ms
INFO: Execute project builders
INFO: Execute project builders (done) | time=5ms
INFO: Project key: my:project
INFO: Base dir: C:UsersAdministratorDesktopXpathRobot
INFO: Working dir: C:UsersAdministratorDesktopXpathRobot.scannerwork
INFO: Load project settings for component key: 'my:project'
INFO: Load quality profiles
INFO: Load quality profiles (done) | time=305ms
INFO: Load active rules
INFO: Load active rules (done) | time=3550ms
WARN: SCM provider autodetection failed. Please use "sonar.scm.provider" to defi
ne SCM of your project, or disable the SCM Sensor in the project settings.
INFO: Indexing files...
INFO: Project configuration:
INFO: 21 files indexed
INFO: Quality profile for py: Sonar way
INFO: Quality profile for web: Sonar way
INFO: ------------- Run sensors on module my:project
INFO: Load metrics repository
INFO: Load metrics repository (done) | time=116ms
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by net.sf.cglib.core.ReflectUtils$1 (file:/C:
/Users/Administrator/.sonar/cache/54f6535c111cefad0fb6a09ba3e61922/sonar-javascr
ipt-plugin.jar) to method java.lang.ClassLoader.defineClass(java.lang.String,byt
e[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of net.sf.cglib.core.
ReflectUtils$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflect
ive access operations
WARNING: All illegal access operations will be denied in a future release
INFO: Sensor Python Sensor [python]
INFO: Starting global symbols computation
INFO: 3 source files to be analyzed
INFO: Load project repositories
INFO: Load project repositories (done) | time=14ms
INFO: Starting rules execution
INFO: 3 source files to be analyzed
INFO: 3/3 source files have been analyzed
INFO: Sensor Python Sensor [python] (done) | time=1481ms
INFO: Sensor Cobertura Sensor for Python coverage [python]
INFO: 3/3 source files have been analyzed
INFO: Sensor Cobertura Sensor for Python coverage [python] (done) | time=23ms
INFO: Sensor PythonXUnitSensor [python]
INFO: Sensor PythonXUnitSensor [python] (done) | time=11ms
INFO: Sensor SonarCSS Rules [cssfamily]
INFO: 1 source files to be analyzed
INFO: 1/1 source files have been analyzed
INFO: Sensor SonarCSS Rules [cssfamily] (done) | time=14364ms
INFO: Sensor JaCoCo XML Report Importer [jacoco]
INFO: Sensor JaCoCo XML Report Importer [jacoco] (done) | time=4ms
INFO: Sensor JavaXmlSensor [java]
INFO: Sensor JavaXmlSensor [java] (done) | time=2ms
INFO: Sensor HTML [web]
INFO: Sensor HTML [web] (done) | time=150ms
INFO: ------------- Run sensors on project
INFO: Sensor Zero Coverage Sensor
INFO: Sensor Zero Coverage Sensor (done) | time=48ms
INFO: SCM Publisher No SCM system was detected. You can use the 'sonar.scm.provi
der' property to explicitly specify it.
INFO: CPD Executor 1 file had no CPD blocks
INFO: CPD Executor Calculating CPD for 3 files
INFO: CPD Executor CPD calculation finished (done) | time=15ms
INFO: Analysis report generated in 106ms, dir size=214 KB
INFO: Analysis report compressed in 99ms, zip size=52 KB
INFO: Analysis report uploaded in 1527ms
INFO: ANALYSIS SUCCESSFUL, you can browse http://localhost:9000/dashboard?id=my%
3Aproject
INFO: Note that you will be able to access the updated dashboard once the server
has processed the submitted analysis report
INFO: More about the report processing at http://localhost:9000/api/ce/task?id=A
XJeUNiUryaM9Bas_RCa
INFO: Analysis total time: 25.030 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 32.540s
INFO: Final Memory: 13M/50M
INFO: ------------------------------------------------------------------------
③ 查看扫描报告
刷新后就能看到扫描后的结果了!
④ 分析报告问题
点进 bug 里可以看到很多问题。
点击 Why is this an issue? 可以查看问题原因,点击整个粉色的部分可以追踪到代码。
⑤ 代码质量评级
点击 quality gates 可以查看代码质量的综合评分。
第五章:sonar 相关设置
① sonar 管理员登录
sonar 管理员登录。
管理员的账号和密码都是 admin
② sonar 设置
管理员登录后才能看到设置页签。
- 二叉树就这么简单
- Elasticsearch就是这么简单
- 让 MyBatis Generator 变的更简单
- SpringMVC【参数绑定、数据回显、文件上传】
- SDNLAB技术分享(五):浅谈Open vSwitch移植
- SpringMVC【校验器、统一处理异常、RESTful、拦截器】
- OpenStack与SDN控制器的集成
- 使用机器学习算法对流量分类的尝试——基于样本分类
- 曾经做过的40道程序设计课后习题总结(一)
- 基于ODL与Pica8交换机端到端的限速实验
- SpringBoot就是这么简单
- SpringData JPA就是这么简单
- Openflow细节理解之—Buffer_id篇
- 移动商城项目总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 你对排序算法了解多少
- 【大数据架构】大数据数据仓库与数据中台架构
- JavaScript中的内置对象、面向对象与原型
- Java.lang.Illegalaccessexception 或 java.lang.NoSuchMethodError
- Python 爬虫进阶必备 | 关于某电商 token 参数加密逻辑分析
- Python 爬虫进阶必备 | 某直播数据分析平台加密参数 sign 分析
- Python 爬虫进阶必备 | 某指数分析平台解密逻辑分析
- SpringBoot开发秘籍 - 事件异步处理
- Hive on Spark参数调优姿势小结
- 想跨端开发小程序?这个最流行的跨端框架一定要学习!
- 1分钟搞定 Nginx 版本的平滑升级与回滚
- 详解:如何在uni-app中选择一个合适的UI组件库
- Python处理HTTP请求之requests指北
- 习题 3: 数字和数学计算
- Python桌面图形程序美化的方法论