首页 > 其他分享 >一文带您了解SonarScanner的原理和使用方法(包括maven构建和命令行执行)

一文带您了解SonarScanner的原理和使用方法(包括maven构建和命令行执行)

时间:2024-11-06 14:16:10浏览次数:3  
标签:SonarScanner java scanner maven 命令行 sonar org SpringComponentContainer

SonarScanner扫描代码

SonarScanner执行源代码分析。这个独立的程序在CI/CD主机上运行,并将分析结果发送到SonarQube服务器,由其计算分析结果,计算质量门并生成报告。为了执行分析,SonarScanner使用安装时从SonarQube服务器下载的语言分析器。

SonarScanner和SonarQube二者的关系,通过下面的图就很容易了解了!

SonarScanner负责扫描代码,然后把结果发送到SonarQube。

SonarQube负责显示SonarScanner的扫描结果并提供扫描rules给SonarScanner。

SonarScanner下载地址

https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/

SonarScanner应用

通过mvn构建扫描

配置pom.xml

<build>
  <pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.sonarsource.scanner.maven</groupId>
        <artifactId>sonar-maven-plugin</artifactId>
        <version>yourPluginVersion</version>
      </plugin>
    </plugins>
  </pluginManagement>
</build>

基础命令

mvn clean verify sonar:sonar

配置sonarqube

mvn clean verify sonar:sonar

-Dsonar.projectKey=KevinDemo1

-Dsonar.host.url=http://localhost:9000

-Dsonar.token=sqp_173f67919bbf5cbbaa6f728e0f02c2c750752a4a

参数解释

sonar.projectKey   sonar中项目的key

sonar.host.url        sonarqube 服务器地址

sonar.token           项目令牌

 我们可以在 sonarqube的项目>分析方法>本地  来获取projectKey 、host url和 token的相关命令和参数的信息

执行完成后,在sonar项目KevinDemo1中的问题页面可以看到本次代码检测发现的具体问题,如下图所示:

sonar-scanner.bat扫描

我们也可以通过 sonar-scanner.bat对代码进行扫描(无需编辑pom.xml文件),进入需要进行检查代码项目的根目录,然后执行以下代码

sonar-scanner.bat -D"sonar.projectKey=KevinDemo1" 

-D"sonar.host.url=http://localhost:9000"

-D"sonar.token=sqp_173f67919bbf5cbbaa6f728e0f02c2c750752a4a"

-D"sonar.java.binaries=.target"

参数解释

sonar.projectKey   sonar中项目的key

sonar.host.url        sonarqube 服务器地址

sonar.token           项目令牌

sonar.java.binaries   如果您不使用Maven或Gradle进行分析,则必须手动为分析提供字节码,即指定target目录

如果不设置该参数会报错如下:

org.sonar.java.AnalysisException: Your project contains .java files, please provide compiled classes with sonar.java.binaries property, or exclude them from the analysis with sonar.exclusions property.
        at org.sonar.java.classpath.ClasspathForMain.init(ClasspathForMain.java:73)
        at org.sonar.java.classpath.AbstractClasspath.getElements(AbstractClasspath.java:319)
        at org.sonar.java.SonarComponents.getJavaClasspath(SonarComponents.java:251)
        at org.sonar.java.JavaFrontend.<init>(JavaFrontend.java:95)
        at org.sonar.plugins.java.JavaSensor.execute(JavaSensor.java:111)
        at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:64)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:88)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:61)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:79)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:61)
        at org.sonar.scanner.scan.SpringModuleScanContainer.doAfterStart(SpringModuleScanContainer.java:82)
        at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:226)
        at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:205)
        at org.sonar.scanner.scan.SpringProjectScanContainer.scan(SpringProjectScanContainer.java:204)
        at org.sonar.scanner.scan.SpringProjectScanContainer.scanRecursively(SpringProjectScanContainer.java:200)
        at org.sonar.scanner.scan.SpringProjectScanContainer.doAfterStart(SpringProjectScanContainer.java:173)
        at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:226)
        at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:205)
        at org.sonar.scanner.bootstrap.SpringScannerContainer.doAfterStart(SpringScannerContainer.java:351)
        at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:226)
        at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:205)
        at org.sonar.scanner.bootstrap.SpringGlobalContainer.doAfterStart(SpringGlobalContainer.java:144)
        at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:226)
        at org.sonar.core.platform.SpringComponentContainer.execute(SpringComponentContainer.java:205)
        at org.sonar.scanner.bootstrap.ScannerMain.runScannerEngine(ScannerMain.java:149)
        at org.sonar.scanner.bootstrap.ScannerMain.run(ScannerMain.java:66)
        at org.sonar.scanner.bootstrap.ScannerMain.main(ScannerMain.java:52)

15:06:40.474 INFO  EXECUTION FAILURE

我的每一篇文章都希望帮助读者解决实际工作中遇到的问题!如果文章帮到了您,劳烦点赞、收藏、转发!您的鼓励是我不断更新文章最大的动力!

标签:SonarScanner,java,scanner,maven,命令行,sonar,org,SpringComponentContainer
From: https://blog.csdn.net/liwenxiang629/article/details/143427463

相关文章

  • 掌握Windows命令行的20个实用命令
    写在前面在本文中,我们将介绍20个实用的Windows命令行命令,这些命令可以帮助你更高效地管理和维护你的计算机。无论你是新手还是有经验的用户,了解这些命令都将对你有所帮助。1.dir-显示当前目录下的文件和子目录列表dir2.cd-更改当前工作目录cdC:\Users\Username......
  • maven知识点总结
    Maven知识总结一、简介Maven是一个项目管理和构建自动化工具。它基于项目对象模型(POM)的概念,将项目的构建、报告和文档等流程标准化。二、核心概念POM(ProjectObjectModel)是Maven的核心,以xml文件形式存在。它包含了项目的基本信息,如项目坐标(groupId、artifactId、version),......
  • Linux系统压力测试工具(命令行工具)
    Linux的命令行压力测试工具在做基准测试时很有用,通过基准测试对了解一个系统所能达到的最大性能指标,这些指标可以作为后续性能比较、优化评估的参考依据。模拟CPU压力:可以使用stress命令使CPU处于高负载状态。例如,通过stress-c4命令(-c选项用于指定CPU核心数),会让系统的4个CPU核......
  • Cannot resolve plugin org.springframework.boot:spring-boot-maven-plugin 报错
    1、检查maven镜像,使用阿里云的;http://maven.aliyun.com/nexus/content/groups/public/如果你的maven能下载其他依赖,下载不了这个,说明不是镜像问题;2、给插件加上版本号;比如<plugin><groupId>org.springframework.boot</groupId>......
  • Linux基础命令(八) 之 alias ,history,stat,type,特殊符号及命令行快捷键
    目录一,命令别名alias常见用法二,命令历史history参数及其作用常见用法三.显示文件或文件系统的详细信息stat参数及其作用常见用法四,显示命令的类型type参数及其作用常见用法五,特殊符号及命令行快捷键一,命令别名alias别名是命令的快捷方式。对于需要经常......
  • java全栈day07-后端Web基础-Maven基础
    一、什么是MavenMaven是一款用于管理和构建Java项目的工具。作用:(提供jar包,跨平台,不同软件使用(IDEA、Eclipse等))导入jar包方式不同简单来说:(1)方便的依赖管理(2)统一的项目结构(3)标准的项目构建流程二、IDEA集成Maven首先需要配置Maven环境(全局)再创建项目(......
  • Maven讲解从基础到高级配置与实践
    一、基础认知1.1Maven的主要作用Maven主要是用来管理Java项目构建流程的工具,包括以下几个方面:依赖管理:通过POM.xml文件管理项目的外部依赖库,不同版本的依赖包可以通过Maven中央仓库自动下载,减少了手动添加依赖包的复杂性。标准化项目结构:Maven提供了一种约定的......
  • Jenkins+Maven+Svn自动打包与发布(Jenkins+Maven+SVN Implement Automatic Code Packa
     ......