sonar3 使用 api/measures/componet 获取代码当,Java实现

        最近团队在做一个技术架构相关的优化,当前的目标是想要通过代码量,系统架构入手。先统计到部门的代码量,如何进行代码行数的统计呢,因为我们采用的是Java技术栈,我就Java技术栈进行说明。 

1、如何统计代码行数

        要统计Java代码的行数,你可以根据你的操作系统和可用工具选择不同的方法。下面是一些常见的方法:

1. 使用IDE

        如果你使用的是IDE(如IntelliJ IDEA, Eclipse等),通常它们都有内置的功能或插件来统计项目中的代码行数。你可以查找你所使用的IDE的文档或在线资源来找到具体的操作步骤。

2. 使用命令行工具

在Linux或macOS上

        咱们可以使用find和wc命令组合来统计特定类型的文件的代码行数。例如,要统计一个目录及其子目录中所有Java文件的行数,可以使用:

find . -name '*.java' | xargs wc -l 

        这条命令会列出所有.java文件的行数,并在最后给出总计。如果你想要使用find和xargs命令组合来统计Java代码行数,同时去掉空行,可以通过管道将find的输出传递给grep命令来过滤掉空行,然后再统计行数。这里有一个示例命令,展示了如何实现这一点:

find . -name '*.java' -print0 | xargs -0 grep -vE '^\s*$' | wc -l 

这个命令的解释如下:

  • find . -name '*.java' -print0:查找当前目录及子目录下所有的.java文件。-print0选项与xargs的-0选项配合使用,用于正确处理文件名中可能包含的空格、换行等特殊字符。

  • xargs -0 grep -vE '^\s*$':xargs -0接收find命令的输出作为grep命令的输入。grep -vE '^\s*$'用于过滤掉空行,其中-v选项表示选取不匹配的行,-E选项表示使用扩展正则表达式,'^\s*$'是一个正则表达式,用于匹配只包含空白字符(包括空格、制表符等)的行。

  • wc -l:统计通过grep过滤后剩余的行数,即非空行的数量。

        这样,咱们就可以得到所有.java文件中非空行的总数。请注意,这种方法并不会区分代码行和注释行,它只是简单地去除了完全为空的行。

在Windows上

        可以使用PowerShell来实现类似的功能。以下是一个使用PowerShell统计当前目录及子目录中所有.java文件行数的例子:

(Get-ChildItem -Recurse -Filter *.java | Select-String . -AllMatches).Matches.Count 

3. 使用专门的代码行数统计工具

        cloc(Count Lines of Code)是一个流行的、跨平台的工具,可以统计多种编程语言的代码行数。使用cloc统计Java代码行数的命令如下:

cloc --include-lang=Java . 

这将会输出当前目录中Java代码的文件数量、空行数、注释行数和代码行数。

4. 使用简单的脚本

        如果你的需求比较特殊,也可以编写简单的脚本来统计代码行数,比如使用Python或其他你熟悉的脚本语言。

        选择哪种方法取决于你的具体需求和你使用的环境。上述方法中的大多数都可以很容易地适应来统计其他编程语言的代码行数。

5. 使用sonar WEB API 统计代码行数

        因为我们的项目都接入了sonar,sonar可以在代码提交的时候进行一系列的检查和统计工作,同时他也提供了WebApi的方式对外提供了接口,所以我们用sonar3提供的接口api/measures/componet获取代码当量,使用Java实现。

创建令牌桶

        在SonarQube中创建访问令牌(Access Token)是一个简单的过程,可以通过SonarQube的Web界面完成。访问令牌允许你以编程方式访问SonarQube API,而不需要使用用户名和密码。以下是创建访问令牌的步骤:

  1. 登录SonarQube:首先,使用你的账户登录到SonarQube的Web界面。

  2. 进入账户设置:登录后,点击右上角的用户名,然后在下拉菜单中选择“My Account(我的账户)”。

  3. 选择Security(安全)选项卡:在账户页面中,找到并点击“Security(安全)”选项卡。

  4. 生成Token:在“Security(安全)”页面,你会看到一个“Tokens(令牌)”部分。在这里,输入一个名称来标识你的Token,然后点击“Generate(生成)”按钮。名称可以是任何有意义的标识符,用于帮助你记住Token的用途。

  5. 保存Token:生成后,Token会显示在屏幕上。请确保复制并保存这个Token,因为它不会再次显示。如果你丢失了Token,你需要生成一个新的。

  6. 使用Token:现在你可以在API调用中使用这个Token了。在需要认证的地方,将Token作为用户名,密码部分留空。如果你使用的是HTTP请求,你可以通过在请求头中添加Authorization: Basic <encoded_token>来使用Token,其中<encoded_token>是你的Token经过Base64编码的结果。注意,编码时Token后面要加上冒号(:),即如果你的Token是abc123,你应该对abc123:进行Base64编码。

请注意,保护好你的Token,不要泄露给他人,因为拥有Token就等同于拥有你账户的访问权限。如果你的Token不慎泄露,应立即在SonarQube界面中撤销该Token,并生成一个新的。

sonar3使用api/measures/componet获取代码当量

        要使用SonarQube的API /api/measures/component 来获取代码度量信息,你可以使用Java进行实现。这个API允许你获取特定组件(例如项目或模块)的度量信息,比如代码行数、复杂度等。

        以下是一个简单的Java示例,展示了如何使用HttpURLConnection来调用SonarQube的API,并获取代码度量信息。请注意,你需要替换以下代码中的your_sonarqube_url、your_project_key、your_metric_keys和your_access_token为你自己的SonarQube服务器地址、项目键、度量键和访问令牌。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;public class SonarQubeApiExample {public static void main(String[] args) {try {// 替换为你的SonarQube服务器地址String sonarQubeUrl = "http://your_sonarqube_url";// 替换为你的项目键String projectKey = "your_project_key";// 替换为你想要获取的度量键,例如:ncloc,complexity等,用逗号分隔String metricKeys = "your_metric_keys";// 替换为你的访问令牌String accessToken = "your_access_token";// 构建API URLString apiUrl = String.format("%s/api/measures/component?component=%s&metricKeys=%s", sonarQubeUrl, projectKey, metricKeys);// 创建URL对象URL url = new URL(apiUrl);HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("GET");// 设置认证信息conn.setRequestProperty("Authorization", "Basic " + java.util.Base64.getEncoder().encodeToString((accessToken + ":").getBytes()));// 发送请求并获取响应码int responseCode = conn.getResponseCode();System.out.println("Response Code: " + responseCode);// 读取响应内容BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));String inputLine;StringBuilder response = new StringBuilder();while ((inputLine = in.readLine()) != null) {response.append(inputLine);}in.close();// 打印响应内容System.out.println(response.toString());} catch (Exception e) {e.printStackTrace();}}
}

        请确保你已经有了SonarQube的访问令牌,你可以在SonarQube的用户界面中生成它。在调用API时,需要使用基本认证(Basic Authentication),并将访问令牌作为用户名,密码部分留空。

        此代码示例展示了如何构建API请求,设置必要的HTTP头(包括认证信息),发送请求,以及如何处理响应。你可以根据需要调整projectKey和metricKeys参数来获取不同项目的不同度量信息。

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

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

相关文章

ZYNQ AXI4 FDMA内存读写

1 概述 如果用过ZYNQ的都知道,要直接操作PS的DDR 通常是DMA 或者VDMA,然而用过XILINX 的DMA IP 和 VDMA IP,总有一种遗憾,那就是不够灵活,还需要对寄存器配置,真是麻烦。对于我们搞 FPGA 的人来说,最喜欢直接了当,直接用FPGA代码搞定。现在XILINX 的总线接口是AXI4总线…

latex中复制到word里面之后如何转变成word自带的公式

详细步骤如下&#xff1a; 第一步&#xff0c;将latex中的公式复制到word里面&#xff0c;例如&#xff1a;$r_1^d$ 第二步&#xff0c;选中$$里面的部分&#xff0c;也就是去掉$$&#xff0c;选中剩余的部分&#xff0c;例如&#xff1a;r_1^d 第三步&#xff0c;word工具栏里…

【代码随想录】【算法训练营】【第21天】 [530]二叉搜索树的最小绝对差 [501]二叉搜索树的众数 [236]二叉树的最近公共祖先

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 21&#xff0c;天气不错的周二~ 题目详情 [530] 二叉搜索树的最小绝对差 题目描述 530 二叉搜索树的最小绝对差 解题思路 前提&#xff1a;二叉搜索树 思路&#xff1a;根据二叉搜索树的中…

长安链使用Golang编写智能合约教程(二)

本篇说的是长安链2.3.的版本的智能合约&#xff0c;虽然不知道两者有什么区别&#xff0c;但是编译器区分。 教程三会写一些&#xff0c;其他比较常用SDK方法的解释和使用方法 编写前的注意事项&#xff1a; 1、运行一条带有Doker_GoVM的链 2、建议直接用官方的在线IDE去写合…

奥枫软件Java要个16K遇到地狱级难度,醉了。。。

我只能说地狱难度&#xff0c;没绝对把握就别去了。我凭借前辈的经验&#xff0c;和当时天时地利人和&#xff0c;六道题答得很不错&#xff0c;但还是没通过。我有备而来都没过&#xff0c;现场写那些应该都是白忙活了。 一面 1&#xff0c;分割一个整数。如123&#xff0c;结…

抖音本地生活服务商入驻指南分享!

当前&#xff0c;各大平台的团购外卖业务持续火爆&#xff0c;并逐渐成为众多创业赛道中的大热门。其中&#xff0c;本地生活服务更是在短时间内杀出重围&#xff0c;成为创业者们的首选。 根据抖音生活服务近日发布的《2023年度数据报告》&#xff0c;2023年&#xff0c;抖音生…

2024年湖北水平能力测试能搞定吗?

武汉中级职称报名正式高一段落&#xff0c;意味着今年武汉市中级职称报名除开东湖高新区之外&#xff0c;其余地方都已经正式截止了&#xff0c;那么接下来大家都在准备6月中下旬的水平能力测试考试。 水平能力测试分为两种&#xff1a;面试答辩或者笔试机考试卷&#xff0c;面…

vue脚手架与创建vue项目

一、前言 vue脚手架的安装与创建vue项目需要先行安装配置node与npm&#xff0c;详情可以看node、npm的下载、安装、配置_node 下载安装-CSDN博客 二、vue脚手架的使用 1、vue与vue脚手架的版本 Vue脚手架&#xff08;Vue CLI&#xff09;是Vue.js官方提供的一个命令行工具&…

【基础篇-Day8:JAVA字符串的学习】

目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题&#xff1a;2.3.1 面试题一&#xff1a;2.3.2 面试题二&#xff1a;2.3.3 面试题三&#xff1a;2.3.4 面试题四&#xff1a; 2.4 String类字符串用于比较的方法2.5 String类字…

埃隆·马斯克的 xAI 募集 60 亿美元,瞄准 AI 超级计算机|TodayAI

埃隆马斯克&#xff08;Elon Musk&#xff09;创立的人工智能公司 xAI 宣布成功募集了 60 亿美元的资金&#xff0c;用于推动其“首批产品推向市场&#xff0c;建立先进的基础设施&#xff0c;并加速未来技术的研发”。马斯克透露&#xff0c;xAI 目前的估值已达到 180 亿美元&…

如何简化不同网间文件摆渡的操作流程,降低IT人员工作量?

为了保护内部核心数据不被泄露&#xff0c;同时有效屏蔽外部网络攻击的风险&#xff0c;企业大多会选择实施网络隔离。将“自己人”与“外人”隔离&#xff0c;具有较强的安全敏感性。有些企业还会在内部网络中进一步划分&#xff0c;比如划分为研发网、办公网、生产网等&#…

PaliGemma – 谷歌的最新开源视觉语言模型(一)

引言 PaliGemma 是谷歌推出的一款全新视觉语言模型。该模型能够处理图像和文本输入并生成文本输出。谷歌团队发布了三种类型的模型&#xff1a;预训练&#xff08;PT&#xff09;模型、混合&#xff08;Mix&#xff09;模型和微调&#xff08;FT&#xff09;模型&#xff0c;每…

【Django】从零开始学Django【2】

五. CBV视图 Django植入了视图类这一功能&#xff0c;该功能封装了视图开发常用的代码&#xff0c;无须编写大量代码即可快速完成数据视图的开发&#xff0c;这种以类的形式实现响应与请求处理称为CBV(Class Base Views)。 1. 数据显示视图 数据显示视图是将后台的数据展示…

LED屏控制卡是如何控制LED屏的?

LED屏控制卡是LED显示屏的关键组件之一&#xff0c;负责将输入的画面信息转换为LED屏能够显示的数据和控制信号。以下是LED屏控制卡的工作原理和功能的详细介绍&#xff1a; 1. LED显示屏控制器概述&#xff1a; LED显示屏控制器是LED显示屏的核心部件之一&#xff0c;也称为LE…

记一次Chanakya靶机的渗透测试

Chanakya靶机渗透测试 首先通过主机发现发现到靶机的IP地址为:172.16.10.141 然后使用nmap工具对其进行扫描:nmap -sC -sV -sS -p- 172.16.10.141 发现目标靶机开启了80,22,21等多个端口&#xff0c; 访问80端口,发现是一个普通的页面,点击进入多个界面也没有其他有用的信息,然…

Openai革新AI陪伴赛道?国内的AI陪伴创业公司有哪些?

人是一切社会关系的总和&#xff0c;而人的这种社会关系又依靠着情感来联系的。但是自从陪伴式AI的出现仿佛就打破了这种传统的关系。 在你的身边有这样一个“人”&#xff0c;她善解人意、风趣幽默&#xff0c;不会发脾气还会随时陪伴着你&#xff0c;这一在科幻电影中才会出现…

Linux-----sed案例练习

1.数据准备 准备数据如下&#xff1a; [rootopenEuler ~]# cat openlab.txt My name is jock. I teach linux. I like play computer game. My qq is 24523452 My website is http://www.xianoupeng.com My website is http://www.xianoupeng.com My website is http://www.…

振弦采集仪在岩土工程地质灾害监测中的可行性研究

振弦采集仪在岩土工程地质灾害监测中的可行性研究 引言&#xff1a; 岩土工程地质灾害是指在岩土体中由于自然力和人类活动等因素引起的&#xff0c;对人类生活、财产以及环境造成威胁的灾害。为了及时发现并准确监测地质灾害的发生和演化过程&#xff0c;振弦采集仪作为一种新…

计网期末复习指南:物理层(物理层的任务、香农公式、常用信道复用技术)

前言&#xff1a;本系列文章旨在通过TCP/IP协议簇自下而上的梳理大致的知识点&#xff0c;从计算机网络体系结构出发到应用层&#xff0c;每一个协议层通过一篇文章进行总结&#xff0c;本系列正在持续更新中... 计网期末复习指南&#xff08;一&#xff09;&#xff1a;计算机…

零基础想学编程,选择哪一门语言更好?(非常详细)零基础入门到精通就业,收藏这一篇就够了!

&#x1f446;点击关注 获取更多编程干货&#x1f446; 编程语言的用途广泛&#xff0c;它们各自在不同的领域和应用场景中发挥着重要作用。 零基础初学者在选择编程语言时&#xff0c;可以从就业方向入手选择。 Python 就业方向&#xff1a;数据科学、机器学习、人工智能…