Windows环境配置SonarQube Scanner实现代码检测分析

Windows下配置SonarQube Scanner检测分析代码

SonarQube 架构

首先这里继续引用下SonarQube的架构图,在上文中记录了Windows下SonarQube服务及数据库环境的配置,本文则在此基础上,简单记录SonarQube Scanner代码分析工具的配置及使用,文中发现有问题或疏漏,但愿能够获得您的反馈。java

对于SonarQube Scanner这里不作太多介绍了,至于为何使用SonarQube Scanner,看这里git

SonarQube 官方文档推荐

SonarQube官方文档 推荐使用,更多缘由,自行百度了~github

Maven配置SonarQube Scannar实现代码分析

此处经过在Maven中配置Sonar Scanner,而后使用 mvn sonar:sonar 命令完成对代码的分析,该方式针对Maven构建项目,Gradle构建的项目未测试,自行尝试。web

Maven环境配置

为了可使用Maven命令运行Sonar来分析项目代码,首先须要将Maven的bin目录添加到环变量内,以下:数据库

Maven 环境变量

配置完成后,在命令行窗口使用命令 mvn -v 查看Maven版本等信息,验证环境变量配置完成windows

Maven 命令行查看版本


Maven增长SonarQube Scanner配置

首先在 Maven 的 conf 目录下找到Maven的配置文件 settings.xml ,搜索到 <profiles> 节点,在其中添加SonarQube Scanner的配置,以下图:浏览器

<profiles>
    
     <!-- 复制如下内容 -->
   
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <!-- 配置 Sonar服务地址,此处为本地服务 -->
            <sonar.host.url>
                http://127.0.0.1:9000/
            </sonar.host.url>
        </properties>
    </profile>
    
    <!-- 复制以上内容 -->
    
</profiles>

注意: 若在Maven的 conf 目录下未找到 settings.xml 配置文件,则能够在Maven仓库默认目录 C:\Users\[你登录帐号的用户名]\.m2 下查找。架构


Maven项目目录执行命令分析

进入想要检测分析的Maven项目目录,在项目根目录打开命令行,输入命令 mvn sonar:sonarjsp

Maven Sonar代码扫描检测

首次进行代码检测扫描时,会下载SonarQube Scanner相关jar包,相似下图:ide

enter description here

扫描完成后,会看到 BUILD SUCCESS 的提示,到此代码的检测扫描完成。

Maven Sonar扫描检测完成


IDEA内经过Maven执行SonarQube Scanner分析

下面介绍,在上步操做完成的基础上,怎么在IDEA开发工具内使用使用SonarQube Scanner进行代码检测分析。

首先IDEA打开须要检测分析的Maven项目,在 Run/Debug Configurations 中,添加一个Maven的运行配置,具体配置以下:

IDEA 打开运行配置

IDEA 添加Maven配置

IDEA Maven配置


配置完成后,选择此运行方式,点击运行,控制台能够看到相似上步中命令行窗口的输出内容,等待出现 BUILD SUCCES 的提示字样后,表示代码的检测分析完成,此时能够在SonarQube服务内查看分析结果。此处仅测试IDEA环境,Eclipse等其余IDE开发工具自行测试。


SonarQube Scanner配置

前面说了Maven使用SonarQube Scanner完成对Maven代码的检测分析,下面记录直接下载的SonarQube Scanner配置及使用。

SonarQube Scanner下载

能够在此处下载支持各类环境的SonarQube Scanner,根据本身须要进行选择便可。在SonarQube官网下载对应系统版本的SonarQube Scanner cli,该版本支持命令行模式。

SonarQube Scanner CLI 下载

下载完成后,任意目录下解压,目录结构大体以下,目录做用相似SonarQube

SonarQube Scanner CLI 目录结构


SonarQube Scanner配置

  • 配置环境变量(为了能够全局使用SonarQube Scanner)

    SonarQube Scanner 环境变量配置

  • 验证环境变量是否配置成功

    SonarQube Scanner 环境变量配置验证

  • 添加检测扫描的项目 打开SonarQube Scanner的配置文件(..\sonar-scanner-3.2.0.1227-windows\conf\sonar-scanner.properties ) ,配置以下

#----- Default SonarQube server
  sonar.host.url=http://localhost:9000
  
  #----- Default source code encoding
  sonar.sourceEncoding=UTF-8
  
  # 配置项目的Key(每一个项目惟一的项目键,使用Maven时设置为 <groupId>:<artifactId>)
  sonar.projectKey=com.codersoft:cms
  
  # 配置分析的项目在SonarQube服务界面显示的名称
  sonar.projectName=cms
  # 配置分析的项目的版本(使用Maven时取<version>的值)
  sonar.projectVersion=1.0
  
  # 配置要分析的项目根目录
  sonar.projectBaseDir=D:/work/workspace/gitee/cms/rbac/cms
  # 配置包含源文件的目录(未设置,则从默认的Maven源代码位置检索)
  sonar.sources=.

添加完成后,命令行窗口,执行命令 sonar-scanner -Dsonar.java.binaries=. (SonarQube的sonar-java-plugin插件版本大于4.12后,不能直接使用 sonar-scanner 命令,须要提供对应源码的字节码,详情看文末异常问题记录)

更多SonarQube Scanner内容见SonarQube官网文档, 更多SonarQube配置的分析参数见此处


IDEA配置SonarLint插件

IDEA支持很多用于代码质量检测的插件,如阿里巴巴的代码规范插件、FindBugs等,此处能够尝试使用SonarLint插件。

SonarLint插件安装

在IDEA中打开设置界面( File -> Settings ) , 选择 Plugins 进入IDEA的插件市场搜索 SonarLint 进行安装

enter description here

等待下载安装完成后,重启的IDEA中便可完成安装。

安装完成重启IDEA后,会出现以下提示,此时须要对SonarLint插件进行配置

IDEA SonarLint未配置提醒

安装提示,点击 SonarLint project configuration 进行SonarLint 项目的配置

IDEA SonarLint关闭远程服务

或在设置中进行配置

IDEA SonarLint关闭远程服务绑定

此处关闭远端SonarQube Server的绑定,即便用本地SentLint插件默认的代码检测规则。这样就能够在本地环境下使用默认规则进行代码检测分析,能够点击菜单项 Analyze ,找到 Aanlyze all files with SonarLint 的子菜单项

IDEA 代码分析菜单项

尝试点击此项,来检测分析当前项目的全部文件

IDEA SonarLint检测分析确认

IDEA SonarLint代码分析检测

单个文件的检测,能够在想检测文件右键选择 SonarLint 进行检测,具体操做此处不赘述。


SonarLint插件配置

SonarQube能够针对项目进行检测规则等设置,要让IDEA中SonarLint插件同步使用SonarQube服务中更新的规则,则须要以下配置

  • 配置SonarQube Server

    IDEA SonarLint配置服务

    支持两种登录验证方式,此处使用本地SonarQube服务,则使用帐号密码登录(远端项目,可使用Token验证)

    IDEA SonarLint配置服务

    IDEA SonarLint配置服务

  • 绑定配置SonarQube服务内的项目,用于同步检测规则

    IDEA SonarLint绑定远端项目 注意:SonarQube没有服务时,此处没法配置,能够经过SonarQube Scanner或Maven来进行项目代码的检测分析,实现项目的添加。 配置完成后,回到服务配置界面,点击更新规则,便可获取SonarQube服务上针对该项目配置的检测规则。

最后,SonarQube的Token,能够在用户设置里进行增删

SonarQube Token生成


SonarQube服务内查看分析结果

完成代码的分析检测后,能够在浏览器访问SonarQube服务地址,此处为本地搭建服务,则访问地址 http:\\localhost:9000

SonarQube 分析结果

能够在Sonar服务管理页面内看到新扫描的Maven项目的分析报告,此时根据须要查看对应内容,再也不赘述。


SonarQube Scanner异常问题记录

SonarQube Scanner执行 sonar-scanner 命令时,出现错误时,能够经过执行 sonar-scanner -X 来输出详细错误日志,方便问题的排查。

异常 AnalysisException: Please provide compiled classes of your project with sonar.java.binaries property

该问题缘由见官方文档

SonarQube Java插件和字节码

大致意思,自SonarJava 4.12后,不使用Maven或Gradle构建工具来分析代码时,必须手动提供与源代码对应的字节码,不然就会分析失败,并出现该异常提示。

能够尝试经过如下方式处理:

  • 执行命令修改成 sonar-scanner -Dsonar.java.binaries=.

  • 或在配置文件内添加下列配置(追加内容在上文基础上进行)

    # sonar.sources=.
    # 此处配置该项目的子项目的源码文件目录
    sonar.sources=./cms-common/src,./cms-dao/src,./cms-service/src,./cms-tester/src,./cms-web/src
    
    # SonarJava 4.12 之后,不使用Maven等构建工具分析代码,则必须手动提供对应源代码的字节码
    # 此处配置该项目的子项目的class字节码文件目录
    sonar.java.binaries=./cms-common/target/classes,./cms-dao/target/classes,./cms-service/target/classes,./cms-tester/target/test-classes,./cms-web/target/classes
  • 下载SonarJava 4.12以前版本的插件,替换现有版本,插件源码地址插件jar包下载地址

    SonarJava各版本下载

    下载完成后,替换 ..\sonarqube-6.7.5\extensions\plugins\ 目录下的 sonar-java-plugin-xxx.jar (本文SonarQube的SonarJava插件版本为 5.7.0.15470) ,重启SonarQube服务便可。

网上不少文章提供第三种方法解决该异常,我下载了 4.10.0.10260 版本的java插件jar包,按照此思路替换插件jar包后,重启服务,如出现下图提示状况

SonarJava jar包版本替换后出现的异常

且运行 sonar-scanner 命令出现SonarQube服务(本文已经将SonarQube服务配置为系统服务)中止的状况,在尝试清理 c:\user\[你当前登录计算机的用户名]\.sonar 下的文件所有删除,而后重启服务,依旧出现上文提示,且服务过一段时间也会中止运行。具体缘由暂不明确,初步认为是插件版本问题,不知是否还有仍是其余问题,未作更多版本测试,本文暂不推荐第三种方法处理,如遇到此状况,且知道解决方案的但愿告知,谢谢。

相关文章
相关标签/搜索