zoukankan      html  css  js  c++  java
  • sonar安装及使用教程

    eclipse和IDEA可以安装 sonarlint插件帮你发现代码里面的bug

    须知:这里使用sonarQube7.9版本(持续更新且稳定),数据库使用pg10版本

    1.  简介

    (1) sonar是什么

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

    (2) SonarQube与Sonar

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

    2.安装

    官网下载后解压即可,下载后启动StartSonar.bat,去浏览器访问localhost:9000端口(默认9000端口,可改动)出现下图说明启动成功(sonarQube内置h2数据库,不配置数据库也可用于测试)

    JDK使用11版本

    (如果出现远程主机强迫关闭了一个现有的连接。没配置数据库之前为端口占用问题,去配置文件里将端口号改成其他的即可,或者去命令行里查看9000端口被那个进程占用,结束他即可,

    推荐更改端口号(sonar.properties文件中的sonar.web.port=要修改的端口号),

    sonar.web.port=9090

    配置数据库了是sonar连不上数据库或端口占用,测试数据库是否可以连接)

     

    3.配置数据库

    这里采用pg数据库10版本(sonarQube7.9及以上版本不支持mysql),若要使用mysql数据库则安装7.8版本且mysql为5.7版本(sonarQube不支持mysql5.7以下和8及以上版本)

    pg里新建sonar数据库,去sonarqube-7.9.5\conf修改

    sonar.properties文件

    sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar?currentSchema=public
    sonar.jdbc.username=mypostgres
    sonar.jdbc.password=mypostgres
    sonar.web.port=9090

     打开任务管理器,详细信息-java.exe结束进程

    然后双击sonarqube-7.9.5\bin\windows-x86-64下面的StartSonar.bat重启sonarQube,等待一会,直到出现sonarQube is up字样

    启动完毕后去sonarQube查看配置及数据库。

    3. 代码分析

    下载下载sonar-scanner解压,配置环境变量,以为win10为例  选中path--编辑--新建--输入地址 C:\sonar-scanner-4.5.0.2216-windows\bin

    环境变量配置了后确认无误,单还是提示不是内部或外部命令,去path里把sonar-canner环境变量往上提升到前三位置

    输入sonar-scanner --version出现版本信息表示配置成功

     

    4.1代码分析(单项目单模块)

     

    去需要分析的项目根目录下新建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

    #忽略文件和目录

    sonar.exclusions=

    # Encoding of the source code. Default is default system encoding

    #sonar.sourceEncoding=UTF-8

    字段意思:

    Sonar.projectKey:项目的key,包住唯一即可,一般为项目名称

    sonar.projectName:项目名称

    sonar.projectVersion:版本号

    sonar.sources:是源文件所在的目录

    sonar.java.binaries:项目编译后的class文件的目录

     

     文件配置好后,修改sonar-scanner.properties配置文件,配置扫描的结果同步到哪个数据库

    sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonar?currentSchema=public
    sonar.jdbc.username=mypostgres
    sonar.jdbc.password=mypostgres
    sonar.sourceEncoding=UTF-8
    sonar.login=admin
    sonar.password=admin
    sonar.host.url=http://localhost:9090

    都配置好后,win+R,cd命令跳转到根目录执行sonar-scanner命令,执行成功则出现如下界面:

     

    访问9000端口的Issues(问题)查看分析结果

     

     

    可在左侧的我的问题中选择代码存在的问题的种类

     

    4.2单项目(多模块)

     

    sonar-project.properties配置,简单版示例,

    #项目id,唯一标识
    sonar.projectKey=my:project
    #项目名
    sonar.projectName=my_project
    #版本
    sonar.projectVersion=1.0
    #扫描源码,多模块,每个模块用逗号分割
    ds-eop.sonar.sources=xxx/src/main/java,
                                       xxx-client/src/main/java,
                                       xxx-web/src/main/java,
                                       xxx-war/src/main/java
    #编译好的class文件存放位置
    ds-eop-client.sonar.java.binaries=./xxx/target/classes
                                                        ./xxx-client/target/classes,
                                                        ./xxx-web/target/classes,
                                                        ./xxx-war/target/classes

    与单模块类似,只是在sources里的扫描文件变为多个,以逗号隔开,binaries也类似。

    1. 扫描web项目

    先到配置-应用市场-插件里下载web插件

     

    然后新建项目

     

     

     

     

     

     

     

    去根目录下执行此命令

    补充:

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

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

    # 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

    #忽略文件和目录

    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

     

    #项目id,唯一标识
    sonar.projectKey=my:project
    #项目名
    sonar.projectName=my_project
    #版本
    sonar.projectVersion=1.0
    sonar.sourceEncoding=UTF-8
    #包含模块
    sonar.modules=xxx,xxx-client,xxx-war,xxx-web
    
    
    xxx.sonar.projectName=xxx
    xxx.sonar.modules=java-module,xml-module
    
    # Java module 
    xxx.java-module.sonar.projectName=xxx-java-module
    xxx.java-module.sonar.sources=src/main/java,src/test/java
    xxx.java-module.sonar.java.binaries=./target/classes
    xxx.java-module.sonar.language=java
    xxx.java-module.sonar.projectBaseDir=.
    
    #Xml module 
    xxx.xml-module.sonar.projectName=xxx-xml-module
    xxx.xml-module.sonar.projectBaseDir=.
    xxx.xml-module.sonar.language=xml
    xxx.xml-module.sonar.sources=src/main/resources,src/test/resources
    
    ####################################################################################################
    
    xxx-client.sonar.projectName=xxx-client
    xxx-client.sonar.modules=java-module,xml-module
    
    xxx-client.java-module.sonar.projectName=xxx-client-java-module
    xxx-client.java-module.sonar.sources=src/main/java,src/test/java
    xxx-client.java-module.sonar.java.binaries=./target/classes
    xxx-client.java-module.sonar.language=java
    xxx-client.java-module.sonar.projectBaseDir=.
    
    xxx-client.xml-module.sonar.projectName=xxx-client-xml-module
    xxx-client.xml-module.sonar.projectBaseDir=.
    xxx-client.xml-module.sonar.language=xml
    xxx-client.xml-module.sonar.sources=src/main/resources,src/test/resources
    
    ####################################################################################################
    xxx-web.sonar.projectName=xxx-web
    xxx-web.sonar.modules=java-module,xml-module
    
    xxx-web.java-module.sonar.projectName=xxx-web-java-module
    xxx-web.java-module.sonar.sources=src/main/java,src/test/java
    xxx-web.java-module.sonar.java.binaries=./target/classes
    xxx-web.java-module.sonar.language=java
    xxx-web.java-module.sonar.projectBaseDir=.
    
    xxx-web.xml-module.sonar.projectName=xxx-web-xml-module
    xxx-web.xml-module.sonar.projectBaseDir=.
    xxx-web.xml-module.sonar.language=xml
    xxx-web.xml-module.sonar.sources=src/main/resources,src/test/resources
    
    ####################################################################################################
    xxx-war.sonar.projectName=xxx-war
    xxx-war.sonar.modules=java-module,xml-module,html-javascript-module
    
    xxx-war.java-module.sonar.projectName=xxx-war-java-module
    xxx-war.java-module.sonar.sources=src/main/java,src/test/java
    xxx-war.java-module.sonar.java.binaries=./target/classes
    xxx-war.java-module.sonar.language=java
    xxx-war.java-module.sonar.projectBaseDir=.
    
    xxx-war.xml-module.sonar.projectName=xxx-war-xml-module
    xxx-war.xml-module.sonar.projectBaseDir=.
    xxx-war.xml-module.sonar.language=xml
    xxx-war.xml-module.sonar.sources=src/main/resources,src/test/resources
    
    
    # html-javascript-module
    xxx-war.html-javascript-module.sonar.projectName=xxx-war-javaScript-module
    xxx-war.html-javascript-module.sonar.projectBaseDir=.
    xxx-war.html-javascript-module.sonar.language=web,js
    xxx-war.html-javascript-module.sonar.sources=src/main/webapp
    

    汉化:https://docs.sonarqube.org/display/PLUG/Plugin+Library 网站搜索 chinese pack 找到自己的版本对应的jar包版本

    然后点击到对应的git地址https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases下载对应版本的jar包,下载之后放到extensions\plugins目录下面重启即可,

    5. 注册为windows服务

    conf目录下打开wrapper.conf文件,将wrapper.java.command的java改问jdk中java.exe的绝对路径

     

    sonar自带的有注册与删除服务的方法,采用wrapper注册为服务,如下已管理员方式运行InstallNTService.bat即

     

    集成阿里p3c规则:

    1.下载插件 

     p3c的jar包为3.2版本,版本不对可能启动不了sonar-pmd-plugin-3.2.0-SNAPSHOT.jar

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

    3.重启sonarqube

    4.去质量配置,右上角,创建,名字自定义,语言java

     

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

     

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

     

    1. 查看p3c激活的规则

     

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

     

  • 相关阅读:
    行坐标HDU1175:连连看(DFS)
    hibernatesqlHibernate中createQuery与createSQLQuery两者的区别
    代码窗口九种方式实现 javascripts 弹出对话框窗口代码
    函数线程VC++多线程函数调用
    错误classspring错误汇总
    android下载手动下载Android SDK
    节点node[算法导论]二叉排序树(Binary Search Tree)
    共享访问失败解决(无法访问 您可能没有权限使用网络资源)
    DnsTester(DNS 服务器性能测试工具)
    vc 花指令 防破解
  • 原文地址:https://www.cnblogs.com/Alwaysbecoding/p/14341680.html
Copyright © 2011-2022 走看看