Linux环境下 sonar、sonar-scanner、cppcheck配置并汉化

2023-11-13

所需安装包以及插件

我的文件夹如下,文件最好按我的方式存放,以免后面修改路径

下载文件并复制到Linux环境

下载以上所有文件,下载链接:

链接:https://pan.baidu.com/s/1WUYqFg1MEqVEzbb_sn49Ig

提取码:6q51

也可以直接去官网下载,下载后直接从Windows系统将文件拖入虚拟机,将文件复制到Linux环境下。

安装 java-jdk11

SonarQube 需要 Java 环境,JDK 已经包含在上面下载的文件夹里面,在projects目录下打开终端,执行如下命令安装:

sudo dpkg -i jdk-11.0.17_linux-x64_bin.deb

安装结束后还要配置Java环境变量,在终端输入vim ~/.bashrc进入bashrc修改环境变量。在末尾输入一下内容:

export JAVA_HOME=/usr/lib/jvm/jdk-11  
export JRE_HOME=${JAVA HOME}
export CLASSPATH=.:${JAVA_HOME}/lib:$
export PATH=S{JAVA_HOME}/bin:$PATH

注意第一行/usr/lib/jvm/jdk-11 是jdk的安装路径,要根据自己虚拟机中jdk的实际安装位置进行修改,修改完成后输入source ~/.bashrc。

安装chrome

由于sonarqube平台需要使用chrome打开,所以这里还有安装chrome,同样在projects目录下打开终端,执行如下命令安装:

sudo dpkg-i google-chrome-stable_107.0.5304.121-1_amd64.deb

配置sonar-cxx-plugin-2.1.0.349和sonar-cnes-report-4.1.3插件

将这两个jar包存放到sonarqube文件夹下的extensions/plugins文件夹下,再重启sonarqube即可。

安装cppcheck

解压cppcheck压缩包,进入cppcheck目录,执行make installl,执行结束后会在文件夹下生成一个可执行文件cppcheck

执行vim ~/.bashrc进行环境变量配置,在末尾输入如下信息然后保存退出,退出后执行source ~/.bashrc命令

export PATH=$PTAH:/home/nfs/project/cppcheck-2.9

这里的路径是cppcheck可执行文件的路径

测试cppcheck

安装完成后,在cppcheck-2.9目录下随便新建一个bad.c文件,执行命令

cppcheck bad.c

有图示结果说明配置成功

编写脚本

编写如下两个脚本,分别用于启动sonarqube服务器和扫描文件

run-sonarqube-web.sh

#!/bin/bash
#export PATH="$PWD/bin:$PATH"

SHELL_DIR=$(cd $(dirname $0); pwd)

sonar="$SHELL_DIR/sonarqube-9.8.0.63668/bin/linux-x86-64/sonar.sh"

$sonar console

sonar="$SHELL_DIR/sonarqube-9.8.0.63668/bin/linux-x86-64/sonar.sh"是sonarqube启动脚本的路径。其中$SHELL_DIR表示当前文件夹,也就是现在所在的project文件夹。

analyse-project.sh

#!/bin/bash
#export PATH="$PWD/bin:$PATH"

SHELL_DIR=$(cd $(dirname $0); pwd)

PROJECT_DIR=$1
PROJECT_KEY=$2
PROJECT_TOKEN=$3

scanner="$SHELL_DIR/sonar-scanner-4.7.0.2747-linux/bin/sonar-scanner"
cppcheck="$SHELL_DIR/cppcheck-2.9/cppcheck"

Cd $PROJECT_DIR

$cppcheck -j4 --xml --xml-version=2./2> cppcheck-report.xml

#sonar-scaner set max memory (default 4G)
export SONAR_SCANNER_OPTS="-Xmx4096m"
$scanner -X\
    -Dsonar.verbose=true\
    -Dsonar.projectKey=SPROJECT_KEY\
    -Dsonar.login=SPROJECT_TOKEN\
    -Dsonar.cxx.file.suffixes=.cxx,.cpp,.cc,.C,.hxx,.hpp,.hh,.h\
    -Dsonar.cxx.cppcheck.reportPaths=cppcheck-report.xml

scanner="$SHELL_DIR/sonar-scanner-4.7.0.2747-linux/bin/sonar-scanner"

cppcheck="$SHELL_DIR/cppcheck-2.9/cppcheck"

上面两个路径分别是sonar-scanner和cppcheck所在的路径。

启动脚本

输入以下命令:

./run-sonarqube-web.sh

脚本运行结束以后在chrome访问http:.//localhost:9000,登录sonarqube,默认用户名admin,密码admin。

分析程序

先在sonarqube服务器新建项目

创建后选择 local 模式

会得到一个项目 Token,记住它

使用自动化脚本 analyse-project.sh 分析 指定程序,命令如下:

./analyse-project.sh<项目路径><SonarQube项目名称><SonarQube项目token>

分析结束后可以在网站上看分析结果

可以生成 DOCX 格式的报告。

测试

这里以cppcheck-2.9/samples目录下的项目为例,先在sonar服务器上新建项目erase(项目名随便),按照上面的步骤得到token,执行如下所示的命令

等待结束后服务器上面会出现如下结果

说明测试成功,能正常使用。发现7个问题,点进问题列表如下图:

并且在samples文件夹下面生成了一个cppcheck-report.xml。内容如下:

注意:xml文件里面显示的内容是由analyse-project.sh脚本控制的,脚本14行

只显示error信息:

$cppcheck -j4 --xml --xml-version=2./2> cppcheck-report.xml

显示所有信息:

$cppcheck -j4 --xml --xml-version=2 --enable=all ./2> cppcheck-report.xml

sonar汉化

汉化包下载地址:https://gitcode.net/mirrors/sonarqubecommunity/sonar-l10n-zh?utm_source=csdn_github_accelerator

汉化包在我的我网盘链接中也可以下载。

下载和自己sonarqube版本对应的汉化包jar包,然后直接拖入虚拟机,再存放到sonarqube文件夹下的extensions/plugins文件夹下,再重启sonarqube即可。

汉化后的效果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux环境下 sonar、sonar-scanner、cppcheck配置并汉化 的相关文章

  • 用另一个文件的标签为图表(ggplot2)中的标题添加下标

    在我的程序中 我有两个主要文件 第一个包含数据 第二个包含标签 或图形标题 文件总数1 数据 3 10000 3 32039232 1 0 0017290351 2 0 0002781092 3 10001 3 32101193 1 0 0
  • 在 execl 在输出中不可见之前打印

    include
  • 确定 TCP Listen() 队列中当前积压的连接数

    有没有办法找出currentLinux 上 TCP 套接字上等待 Accept 的连接尝试次数 我想我可以在每个事件循环上点击 EWOULDBLOCK 之前计算成功的 Accept 数量 但我使用的是隐藏这些细节的高级库 Python Tw
  • Xvfb 冻结初始化 GLX 扩展

    我正在尝试运行无头 Xvfb 服务器来捕获 Amazon EC2 micro 上的屏幕截图 但它在 GLX 上陷入了困境 我使用此脚本安装了 GLX Xvfb 和所有库 https gist github com joekiller 414
  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 在本地主机上使用相同的 IP 和端口创建套接字

    我在 Linux 上看到奇怪的行为 我看到远程端和本地端都显示相同的 IP 和端口组合 以下是 netstat 输出 netstat anp 网络统计grep 6102 tcp 0 0 139 185 44 123 61020 0 0 0
  • 使用脚本检查 git 分支是否领先于另一个分支

    I have branch1 and branch2我想要某种 git branch1 isahead branch2 这将显示如果branch1已承诺branch2没有 也可能指定这些提交 我无法检查差异原因branch2 is在之前br
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • Python glob,操作系统,相对路径,将文件名放入列表中[重复]

    这个问题在这里已经有答案了 我正在尝试创建一个目录中所有文件的列表 其中文件名以 root 结尾 在阅读了论坛中的一些文章后 我尝试使用 glob 和 os listdir 的基本策略 但我都遇到了麻烦 首先 当我使用 import glo
  • 如何在 Linux 和 C 中使用文件作为互斥体?

    我有不同的进程同时访问 Linux 中的命名管道 并且我想让此访问互斥 我知道可以使用放置在共享内存区域中的互斥体来实现这一点 但作为一种家庭作业 我有一些限制 于是 我想到的是对文件使用锁定原语来实现互斥 我做了一些尝试 但无法使其发挥作
  • “git add”返回“致命:外部存储库”错误

    我刚刚进入 git 的奇妙世界 我必须提交我对程序所做的一系列更改 位于名为的目录中 var www myapp 我创建了一个新目录 home mylogin gitclone 从这个目录中 我做了一个git clone针对公共回购 我能够
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 如何在不使用 IDE 的情况下在 Linux 上运行 Java 项目

    我是 Java 新手 基本上 我开发了一个java项目 其中包含Eclipse中的多个Java包 该项目在我安装了 redhat Linux 的桌面上运行正常 然而 我需要在一个更强大的没有安装X11的Linux服务器 redhat ent
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • awk 在循环中使用时不打印任何内容[重复]

    这个问题在这里已经有答案了 我有一堆使用 file 1 a 1 txt 格式的文件 如下所示 A 1 B 2 C 3 D 4 并使用以下命令添加包含每个文件名称的新列 awk print FILENAME NF t 0 file 1 a 1
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String

随机推荐

  • Java打印程序设计全攻略 .

    前言 在我们的实际工作中 经常需要实现打印功能 但由于历史原因 Java提供的打印功能一直都比较弱 实际上最初的jdk根本不支持打印 直到jdk1 1才引入了很轻量的打印支持 所以 在以前用Java Applet JSP Servlet设计
  • div盒模型宽高计算

    一 计算div盒模型宽高 div盒模型宽度 width 左右padding 左右border 不包含左右margin div盒模型高度 height 上下padding 上下border 不包含上下margin
  • Linux新手入门教程

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net li3839 article details 80658514 下面给你讲解新手第一次
  • 怎么看有没有用到ajax,使用AJAX请求JSON数据。我没有看到结果

    我正在学习Angular JS 为什么我看不到任何结果 使用AJAX请求JSON数据 我没有看到结果 这是我的例子 HTML post desc JS var app angular module MyApp app controller
  • discuz伪静态设置方法

    首先 进入后台 全局 SEO设置 URL静态化 如图 接着打开 查看当前的Rewrite规则 下载合适规则
  • mac上使用svn

    第一步 使用Homebrew安装subversion Homebrew不知道怎么安装的话 请自行百度 brew install subversion 第二步 使用如下的命令进行检查是否安装了这个软件 brew list 得到如下结果 使用如
  • vue常用组件库

    Vue是主流的前端框架一 Vue js UI组件 element 饿了么出品的Vue2的web UI工具套件 Vux 基于Vue和WeUI的组件库 mint ui Vue 2的移动UI元素 iview 基于 Vuejs 的开源 UI 组件库
  • 32黑马QT笔记之QPixmap和QImage的相互转换

    32黑马QT笔记之QPixmap和QImage的相互转换 1 QPixmap与QImage的互相转换 1 头文件 void paintEvent QPaintEvent 2 实现 cpp文件 void Widget paintEvent Q
  • 敏捷开发系列终极之旅 第六站(像橄榄球运动一样富有激情的SCRUM)

    由来 为什么是Scrum Scrum原本的意思是橄榄球运动的一个专业术语 指 在橄榄球比赛中 双方前锋站在一起紧密相连 当球在他们之间投掷时他们奋力争球 在敏捷开发系列中 把一种开发流程命名为Scrum 其实就意味着 这种敏捷开发的流程 就
  • 解决Android手机root仍然出现adbd connot run as root in production build

    对于手机已经root 但是使用 adb root命令仍然出新adbd connot run as root in production build 原因是手机固件里面设置了adb shell 禁止root 解决方法 下载文件 http do
  • Linux文件、磁盘管理的一些命令:

    Linux文件 磁盘管理的一些命令 Num01 gt ls ls 列出目录的内容 linux文件或目录名称英文最长可有255个字符 中文最长127个字符 表示当前目录 以 开头的文件为隐藏文件 需要以 a参数才能显示 表示上级目录或父目录
  • Training a deep autoencoder or a classifier on MNIST digits_之调试运行与理解

    运行这个程序的主要目的 深入理解deep autoencoder 的基本原理和基本架构 搞明白是如何搭建起来的 弄清它是如何训练学习的 又是如何提取目标的特征的 最终又是怎样分类的 代码主程序如下 mnistdeepauto m plain
  • PHP计算时间差

    时间计算 距离现在多长时间 function format date time t time time f array 31536000 gt 年 2592000 gt 个月 604800 gt 星期 86400 gt 天 3600 gt
  • Web应用下实现定时任务简便方法

    在WEB应用下实现定时任务的简便方法 在web方式下 如果我们要实现定期执行某些任务的话 除了用quartz等第三方开源工具外 我们可以使用Timer和TimeTask来完成指定的定时任务 第一步 创建一个任务管理类 实现ServletCo
  • 基于QT的人脸识别考勤管理系统【一】

    前言 上篇我们已经用opencv实现了人脸识别https blog csdn net qq 42449351 article details 99052241 现在我们就用人脸识别来做一个考勤管理系统 该系统开发工具是 win10 Qt C
  • Numpy学习笔记三——数组切片、bool索引、掩码和花哨索引

    Numpy数组切片 bool索引 掩码和花哨索引 数组切片 slice 数组切片的公式为 my array start end step start end step 示例1 import numpy as np 设置随机种子 np ran
  • mfc入门基础(一)-单文档应用程序框架

    最近因为相关业务 需要接触下mfc的一些老代码 但是mfc上手并没有qt那么简单 所以四处寻找学习资料 发现一个写的挺好的教程 这边我进行转载下 学习的过程中进行了一些修改 总结下 此处附上原文链接 鸡啄米MFC入门系列教程 逸适安然的博客
  • Python爬虫三:抓取链家已成交二手房信息(58W数据)

    环境 Windows7 python3 6 Pycharm2017 目标 抓取链家北京地区已成交二手房信息 无需登录 如下图 户型 朝向 成交时间价格等 保存到csv 最后一共抓取约58W数据 程序运行8h 全部文章 京东爬虫 链家爬虫 美
  • 本人遇到的spring事务之UnexpectedRollbackException异常解决笔记

    本人最近在使用spring事务管理的过程中遇到如下异常 导致服务端抛出500给前端 让搞前端的哥们抱怨我心里着实不爽 前前后后折腾了近半个小时才得于解决 今天就做个笔记 以免日后又犯这个错误 好了 错误是这样的 org springfram
  • Linux环境下 sonar、sonar-scanner、cppcheck配置并汉化

    所需安装包以及插件 我的文件夹如下 文件最好按我的方式存放 以免后面修改路径 下载文件并复制到Linux环境 下载以上所有文件 下载链接 链接 https pan baidu com s 1WUYqFg1MEqVEzbb sn49Ig 提取