sonar的安装以及使用

news2025/1/10 11:31:57

sonar的安装以及使用

  • 简介
    • 1. sonar是什么
    • 2. SonarQube与Sonar
  • 安装
    • 1.下载sonarqubexxx.zip并且解压即可:
    • 2.配置数据库
    • 3.重启sonarQube会自动建表。
  • 使用
    • 1.下载sonar-scanner:(这个工具是对源码进行扫描,并将结果保存到数据库以便用上面的sonarqube进行分析)
    • 2.配置mysql信息
    • 3.配置环境变量 并测试
    • 4.打开要进行代码分析的项目根目录,新建sonar-project.properties文件
    • 5.设置成功后,启动sonarqube服务
    • 6.开始分析:
    • 7.访问9000端口查看分析结果
    • 8.选择一个bug进行查看(可以看到与git也进行了集成,可以看到编写人与时间以及bug的原因)
    • 9. 解决下面的bug
    • 11.程序中故意写一个空指针异常看是否可以检测出来
  • 注册为windows服务
    • 0. 如果检测html和JSP需要下载sonar-html-plugin-3.1.0.1615.jar插件置于sonarqube-6.7.6\extensions\plugins目录下,而且html的language为web,jsp的language为jsp
    • 1.项目结构如下:
    • 2.sonar-project.properties配置文件如下:
  • 补充:sonar集成阿里的p3c规则
    • 1.下载插件
    • 2.jar放在sonarqube-6.7.6\extensions\plugins目录下
    • 3.重启sonarqube
    • 4.到网页规则搜索p3c,如下
    • 5. 创建规则,不用选文件,如下:
    • 6.接下来激活p3c规则 (选择上面的创建的p3c,同时搜索未激活的p3c,然后激活即可。如果p3c也需要即可sonar的自带规则就不要加搜索条件,选择所有的规则)
    • 7.查看p3c激活的规则 (48条)
    • 8. 到质量配置设为java默认规则即可
    • 9.简单的测试

SonarQube是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误,下面将会介绍一下这个工具的安装、配置以及使用。

简介

1. sonar是什么

Sonar是一个用于代码质量管理的开源平台,用于管理代码的质量,通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误。

2. SonarQube与Sonar

SonarQube是sonar的服务端,相当于一个web服务器中的tomcat,用来发布应用,在线浏览分析等。

安装

1.下载sonarqubexxx.zip并且解压即可:

下载地址:http://www.sonarqube.org/downloads/

下载完成后解压后点击StartSonar.bat启动即可,如下:

在这里插入图片描述
http访问9000端口出现下面则证明安装成功。 (如果需要修改端口等信息修改sonarqube-6.7.6\conf\sonar.properties即可)

在这里插入图片描述

2.配置数据库

  1. 在mysql数据库新建一个库的名称为sonar

  2. 修改sonar/conf/sonar.properties的db信息:

不用放置驱动包,也不用创建表。

sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

3.重启sonarQube会自动建表。

在这里插入图片描述

4.接下来访问9000端口然后进行登录即可。默认创建的用户名和密码都是admin。可以在system选项卡看到系统信息
在这里插入图片描述

使用

1.下载sonar-scanner:(这个工具是对源码进行扫描,并将结果保存到数据库以便用上面的sonarqube进行分析)

下载地址: https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner

2.配置mysql信息

\sonar\sonar-scanner-3.3.0.1492-windows\conf\sonar-scanner.properties文件

#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here

#----- Default SonarQube server
#sonar.host.url=http://localhost:9000

#----- Default source code encoding
#sonar.sourceEncoding=UTF-8

sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

3.配置环境变量 并测试

path中增加如下变量: E:\sonar\sonar-scanner-3.3.0.1492-windows\bin

C:\Users\Administrator>sonar-scanner --version
INFO: Scanner configuration file: E:\sonar\sonar-scanner-3.3.0.1492-windows\bin\..\conf\sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 3.3.0.1492
INFO: Java 1.8.0_121 Oracle Corporation (64-bit)
INFO: Windows 10 10.0 amd64

4.打开要进行代码分析的项目根目录,新建sonar-project.properties文件

# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name displayed in the SonarQube UI
sonar.projectName=springboot-ssm
sonar.projectVersion=1.0
 
# 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=src/main/java
sonar.java.binaries=./target/classes
 
# Encoding of the source code. Default is default system encoding
#sonar.sourceEncoding=UTF-8

解释:projectName是项目名字,sources是源文件所在的目录;sonar.java.binaries是项目编译后的class文件的目录。

5.设置成功后,启动sonarqube服务

6.开始分析:

cmd窗口进入到项目的根路径,执行下面命令即可:

E:\xiangmu\springboot-ssm>sonar-scanner

如下:

在这里插入图片描述

7.访问9000端口查看分析结果

项目分析概要图:

在这里插入图片描述

查看存在的bug:

在这里插入图片描述

8.选择一个bug进行查看(可以看到与git也进行了集成,可以看到编写人与时间以及bug的原因)

在这里插入图片描述

此工具还分析出一些异常信息的记录等,如下:

在这里插入图片描述

9. 解决下面的bug

在这里插入图片描述

代码修改为下面即可:(上面逻辑应该是没有错,只是在多次改变引用的情况下被检测为bug)

   @Override
    public Token addOrUpdateToken(String username) {
        // 1.判断是否有对应的token,如果有的话更新时间,没有的话就创建token并且返回
        Token token = findTokenByUsername(username);
        // 1.1创建token并返回
        if (token == null) {
            return generateAndSaveTokenByUserName(username);
        }

        // 1.2根据失效时间更新且返回token
        return updateTokenByTokenLoseTime(token);
    }

10.解决异常处理的bug
在这里插入图片描述

代码修改为:

@Scheduled(fixedRate = 10000)
public void cron() {
    try {
        Thread.sleep(2000);
        System.out.println("spring anno task execute times " + count++);
    } catch (InterruptedException e) {
        System.err.println("InterruptedException " + e);
        Thread.currentThread().interrupt();
    }
}

11.程序中故意写一个空指针异常看是否可以检测出来

String string = null;
if(string.equals("xxx")){
    System.out.println("xxx");
}

结果:

在这里插入图片描述

更多的学习参考官网:
  https://docs.sonarqube.org/display/SCAN/Advanced+SonarQube+Scanner+Usages

https://www.sonarqube.org/

补充:sonarqube汉化
到https://docs.sonarqube.org/display/PLUG/Plugin+Library 网站搜索 chinese pack

在这里插入图片描述

然后点击到对应的git地址https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases下载对应版本的jar包,下载之后放到sonar\sonarqube-6.7.6\extensions\plugins目录下面重启即可,如下:
  
在这里插入图片描述

再次通过9000端口访问发现变为中文版:

在这里插入图片描述

注册为windows服务

sonar自带的有注册与删除服务的方法,采用wrapper注册为服务,如下已管理员方式运行InstallNTService.bat即可:
在这里插入图片描述

注册为服务之后我这里启动服务报错不能正常启动服务,到 %sonar%/logs/sonar.log中查看原因如下:

Launching a JVM...
Unable to execute Java command.  系统找不到指定的文件。 (0x2)

解决办法:修改%sonar%/conf/wrapper.conf中java的路径为绝对路径

在这里插入图片描述

补充:sonar-scanner的配置也可以进行分模块配置,比如我想检测一个web项目的所有文件(包括Java、JSP、JS、Html、XML),如下:

0. 如果检测html和JSP需要下载sonar-html-plugin-3.1.0.1615.jar插件置于sonarqube-6.7.6\extensions\plugins目录下,而且html的language为web,jsp的language为jsp

在这里插入图片描述

1.项目结构如下:

在这里插入图片描述

2.sonar-project.properties配置文件如下:

# must be unique in a given SonarQube instance
sonar.projectKey=my:project
# this is the name displayed in the SonarQube UI
sonar.projectName=sonarTest
sonar.projectVersion=1.0
sonar.modules=java-module,javascript-module,xml-module,jsp-module,html-module
sonar.sourceEncoding=UTF-8

# Java module 
java-module.sonar.projectName=Java Module 
java-module.sonar.language=java 
java-module.sonar.projectBaseDir=.
java-module.sonar.sources=src
#ignore files and directory
java-module.sonar.exclusions=src/cn/qlq/test2/**,src/cn/qlq/test3.java
sonar.java.binaries=./build

# JavaScript module 
javascript-module.sonar.projectName=JavaScript Module 
javascript-module.sonar.projectBaseDir=.
javascript-module.sonar.language=js 
javascript-module.sonar.sources=WebContent

# Jsp module 
jsp-module.sonar.projectName=Jsp Module 
jsp-module.sonar.projectBaseDir=.
jsp-module.sonar.language=jsp
jsp-module.sonar.sources=WebContent

# Html module 
html-module.sonar.projectName=Html Module 
html-module.sonar.projectBaseDir=.
html-module.sonar.language=web
html-module.sonar.sources=WebContent

#Xml module 
xml-module.sonar.projectName=Xml Module 
xml-module.sonar.projectBaseDir=.
xml-module.sonar.language=xml
xml-module.sonar.sources=WebContent

3.测试结果从web上访问如下:
在这里插入图片描述

补充:sonar集成阿里的p3c规则

1.下载插件

到https://github.com/mrprince/sonar-p3c-pmd/releases 下载jar包即可

2.jar放在sonarqube-6.7.6\extensions\plugins目录下

3.重启sonarqube

4.到网页规则搜索p3c,如下

在这里插入图片描述

5. 创建规则,不用选文件,如下:

在这里插入图片描述

6.接下来激活p3c规则 (选择上面的创建的p3c,同时搜索未激活的p3c,然后激活即可。如果p3c也需要即可sonar的自带规则就不要加搜索条件,选择所有的规则)

在这里插入图片描述

7.查看p3c激活的规则 (48条)

在这里插入图片描述

8. 到质量配置设为java默认规则即可

在这里插入图片描述

9.简单的测试

sonar自带的与p3c规则最明显的区别是:

str.equals(“xxx”)在p3c会被检测,在自带规则不会被检测到。

System.out.print… 会被自带规则检测到,p3c不会检测到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/189606.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cloud 以及 Spring Cloud Alibaba 使用总结

title: Spring Cloud 以及 Spring Cloud Alibaba 使用总结 date: 2023-01-13 11:54:15 tags: Spring categories:Spring cover: https://cover.png feature: false 1. 版本对应 官网版本说明:版本说明 alibaba/spring-cloud-alibaba Wiki (github.com) 这里使用 …

通过应用场景深度理解监控宝在业务中的实践价值

近年来,越来越多的企业实现了核心业务系统互联网化,无论是企业内部员工还是企业外部用户或是供应链上下游合作伙伴,均通过互联网和Web应用与企业建立起了紧密的联系。基于此,网络性能对企业业务的影响也变得越来越重要&#xff0c…

阿里云服务器使用docker部署springboot+mysql+redis项目

首先,由于springboot中使用的内置的tomcat,需要讲将ttp转为https的自行搜索博客把: 步骤大概是再阿里云上注册免费SSL证书,下载证书后 拖到项目资源目录下,配置application.properties相关属性 下面引出博客主要内容……

校园网免认证上网的方法

很多时候,当流量不够用时,看着周围那么多热点又连不上,是不是有点心痒痒呢?那么有没有办法不需要要通过这些热点的认证即可上网呢?当然是有的。另外在此强调一点,本教程仅用于学习测试用途,请勿…

【靶机】vulnhub靶机my_file_server2

靶机下载地址:My File Server: 2 ~ VulnHubip:192.168.174.144Kali:192.168.174.128使用arp-scan扫描到ip是使用nmap扫描开放的端口信息,发现靶机开放端口信息如下21端口ftp服务,允许匿名(anonymous&#x…

编译安装nacos集群部署

Nacos 基于 java 开发的,运行依赖于 java 环境。依赖 64 bit JDK 1.8服务器准备:192.168.11.139、192.168.11.141、192.168.11.142 1.首先上传jdk的包 三台都操作tar xzf jdk-8u121-linux-x64.tar.gz -C /usr/local/ 解压jdk的包cd /usr/local/ 切换至解…

计算机图形学 第9章 自由曲线曲面

第8章不学 目录 # 学习目标 # 消隐 ## 定义 1.线框模型 2.表面模型 3.实体模型 双表结构 定义三维顶点类 定义表面类 读入立方体的点表 读入立方体的面表 1.柏拉图多面体 柏拉图多面体对偶性 正四面体 正八面体 正十二面体 黄金数 黄金矩形 黄金三角形 光滑物体 …

Spring Bean 的生命周期

文章目录一、前言二 、Bean 的生命周期2.1 Bean 的定义信息2.2 Bean 的创建2.3 Bean 的使用2.4 Bean 的销毁2.5 循环依赖2.5.1 什么是循环依赖2.5.2 Spring 解决循环依赖2.5.2.1 三级缓存2.5.2.2 提前暴露2.5.3 注意2.5.3.1 三级缓存结构中 map 分别存储什么类型对象2.5.3.2 三…

JVM-内存与垃圾回收-1.JVM与Java体系结构

1.JVM与Java体系结构 1. JVM:跨语言的平台 Java是目前应用最为广泛的软件开发平台之一。随着Java以及Java社区的不断壮大Java 也早已不再是简简单单的一门计算机语言了,它更是一个平台、一种文化、一个社区。 ● 作为一个平台,Java虚拟机扮…

机器人中的数值优化之BFGS(nonconvex and smooth)

本文ppt来自深蓝学院《机器人中的数值优化》 目录 1 wolfe conditions 2 cautious update 3 BFGS for nonconvex functions 1 wolfe conditions 当我们需要搜索方向是下降方向时,一定要让近似hessian的矩阵正定,这就需要满足wolfe条件 首先需要满…

34. 实战:基于某api实现歌曲检索与下载(附完整源代码)

目录 前言 (相关链接在评论区) 目的 (相关链接在评论区) 思路 (相关链接在评论区) 代码实现 1. 访问某音乐平台(链接放在评论区了),抓包搜索接…

BUUCTF reverse题解汇总

本文是BUUCTF平台reverse题解的汇总 Page1 easyrereverse1reverse2内涵的软件新年快乐xorhelloworldreverse3不一样的flagSimpleRevJava逆向解密[GXYCTF2019]luck_guy[BJDCTF2020]JustRE刮开有奖简单注册器pyre[ACTF新生赛2020]easyrefinditrsa[ACTF新生赛2020]rome[FlareOn4]…

穿越寒冬春暖花开,当下便是在社科院杜兰金融管理硕士项目读研的好时光

时间无声的从指尖划过,严寒的冬天已经过去,春天即将到来。23考研期间,恰逢特殊时期,好多同学错失了考试的机会,忧心2023是否还可以读研。不要担心,免联考的社科院与杜兰大学金融管理硕士项目来了&#xff0…

【html】如何处理显示ttf字体图标

当看到某些文件的后缀名是ttf,表示是字体文件,除了显示字体,还能显示图标,如果需要显示的图标太多,就把它们放在一个文件中,方便统一管理图标,在此讲一下怎么显示字体图标。 打开文件 电脑上用…

超低损耗电路新研究:光芯片电路+量子计算

(图片来源:网络)在光通信以及使用光而不是电荷来存储和传输信息的量子计算机的设计中,要做到以最小的损耗传输,并能操纵最小单位光,光子起着至关重要的作用。现在,美国国家标准与技术研究院的研…

DynaSLAM-4 DynaSLAM中Mask R-CNN部分源码解析(Ⅲ)

目录 1.RPN 1.1 RPN层的作用与实现解读 1.2 候选框过滤ProposalLayer层 2. DetectionTargetType层 2.1 DetectionTargetType层作用 2.2 正负样本选择与标签定义 1.RPN 1.1 RPN层的作用与实现解读 上篇博客中我们解释了如何通过generate_pyramid_anchors在每一个特征层上…

Nacos学习:一、Nacos注册中心

Nacos 1. Nacos注册中心 ​ 国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。 ​ Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您实现动态服务发…

JVM笔记(4)—— 运行时数据区——堆空间

一、堆空间内存结构 堆空间内存分为年轻代和老年代。年轻代又细分为Eden区,Survivor1区和Survivor2区(又称为from区和to区) 为什么要对堆空间进行分代? 因为不同对象的生命周期不同,绝大部分对象都是临时对象&#x…

DIY 3D打印机——【有啥用啥版】

3D打印已经非常普及,手搓3D打印机的也很普遍了,不幸的是多年前买的三角洲(delta型)打印机年前罢工了,幸好它完成了一项重要使命:让手搓的铣床动起来,从而能够让铣床把受力部分的PLA零件自己加工…

高频卡顿问题分析

从监控图中可以看到,3.76k的用户,两分钟内报卡顿次数达到100万次 ,很恐怖,这个是非正常的卡顿 由于没有日志,只能先看代码分析,出现高频卡顿的原因 问题描述 在播放过程,会频繁上报卡顿&…