Idea中使用Statistic插件统计工程项目代码量

1. 功能背景

公司要对一个项目进行代码统计,这么多类,总不能让我一个一个数据,于是想到了Statistic插件。让我们一起看看Statistic插件怎么使用吧。

2. Statistic插件

首先需要知道Idea统计项目代码行数,主要是使用Statistic插件来统计,点击File->Settings,如下图所示:

image-20230831164908348

进去Settings界面之后,点击Plugins,然后点击下方正中间的Marketplace,如下图所示:

image-20230831165623377

搜索Statistic,选中之后,点击右侧的Install进行安装插件即可,安装完成点击Apply->Ok即可。

然后在左下方可以看到Statistic,若看不到则重启idea即可。

3. 统计代码量

点击下面任务栏的Statistic标签,如下图:

image-20230831165817480

这个时候是没有统计的,如果需要统计的话,点击"Refresh"扫描项目代码,如下图:

image-20230831165850829

Overview 参数说明(例如java)

  • Count : java文件的数量
  • Size SUM : java所有文件总占用硬盘大小
  • Size MIN : java文件的最小文件占用硬盘大小
  • Size MAX : java文件的最大文件占用硬盘大小
  • Size AVG : java文件的平均占用硬盘大小
  • Lines : java文件的总行数
  • Lines MIN : java文件的最小行数
  • Lines MAX : java文件的最大行数
  • Lines AVG : java文件的平均行数

上文中统计出来是全部代码,如果我们统计对应类型的代码,可以点击我们需要统计的标签,例如Java,可以看到对应对象的代码统计,如下图:

image-20230831170047999

指定文件类型(如java)统计参数说明

  • Total Lines :代码总行数(包括注释,空行)
  • Source Code Lines :源代码行数(不包括注释,空行)
  • Source Code Lines(%) :源代码行数百分比(Source Code Lines/Total Lines)
  • Comment Lines :注释行数
  • Comment Lines(%) : 注释行数百分比(Comment Lines/Total Lines)
  • Blank Lines : 空行数
  • Blank Lines(%) : 空行百分比(Blank Lines/Total Lines)

可见,可对不同类型,从不同维度对工程项目的代码量进行统计,就可以统计工程中的代码行数。

4. 测试一下吧

我承认我就是来凑数的~

随便找个类吧,这里用InitDataConfig.java

package com.maple.inputdb.config;import com.maple.inputdb.bean.InitModel;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;/*** @author 笑小枫 <https://xiaoxiaofeng.com/>* @date 2023/3/10*/
@Slf4j
@Component
@AllArgsConstructor
public class InitDataConfig {private final DynamicDatasourceConfig dynamicDatasourceConfig;private final InitConfigProperties initConfigProperties;public void initData(InitModel initModel) {if (DbStatusSingleton.getInstance().getDbStatus()|| Boolean.TRUE.equals(dynamicDatasourceConfig.checkDataSource())) {throw new RuntimeException("数据已完成初始化,请勿重复操作");}// 检查数据库连接是否正确checkConnection(initModel);if (!new File(initConfigProperties.getInitFilePath() + initConfigProperties.getInitUserName()).exists()) {File file = createFile(initConfigProperties.getInitFilePath(), initConfigProperties.getInitUserName());try (FileWriter out = new FileWriter(file);BufferedWriter bw = new BufferedWriter(out)) {bw.write("userName=" + initModel.getSysUserName());bw.newLine();bw.write("password=" + initModel.getSysPassword());bw.flush();} catch (IOException e) {log.info("写入管理员信息文件失败", e);throw new RuntimeException("写入管理员信息文件失败,请重试");}}if (!new File(initConfigProperties.getInitFilePath() + initConfigProperties.getInitDbName()).exists()) {File file = createFile(initConfigProperties.getInitFilePath(), initConfigProperties.getInitDbName());try (FileWriter out = new FileWriter(file);BufferedWriter bw = new BufferedWriter(out)) {bw.write(String.format("jdbcUrl=jdbc:mysql://%s:%s/%s?autoReconnect=true&autoReconnectForPools=true&useUnicode=true&characterEncoding=UTF-8",initModel.getDatabaseHost(), initModel.getDatabasePort(), initModel.getDatabaseName()));bw.newLine();bw.write("username=" + initModel.getUser());bw.newLine();bw.write("password=" + initModel.getPassword());bw.newLine();bw.write("driverClassName=com.mysql.cj.jdbc.Driver");bw.flush();} catch (IOException e) {log.info("写入数据库文件失败", e);throw new RuntimeException("写入数据库文件失败,请重试");}}boolean isOk = dynamicDatasourceConfig.checkDataSource();if (!isOk) {throw new RuntimeException("初始化数据库信息失败,请检查配置是否正确");}}/*** 检查数据库连接是否正确** @param initModel 连接信息*/private void checkConnection(InitModel initModel) {try {Class.forName("com.mysql.cj.jdbc.Driver");Connection conn = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/%s",initModel.getDatabaseHost(), initModel.getDatabasePort(), initModel.getDatabaseName()), initModel.getUser(), initModel.getPassword());log.info("校验数据库连接成功,开始进行数据库配置" + conn.getCatalog());conn.close();} catch (SQLException | ClassNotFoundException e) {log.info("校验数据库连接失败", e);throw new RuntimeException("初始化数据库信息失败,请检查配置是否正确:" + e.getMessage());}}private File createFile(String path, String fileName) {File pathFile = new File(path);if (pathFile.mkdirs()) {log.info(path + " is not exist, this is auto created.");}File file = new File(path + File.separator + fileName);try {if (!file.createNewFile()) {throw new RuntimeException(String.format("创建%s文件失败,请重试", fileName));}} catch (IOException e) {log.error(String.format("创建%s文件失败", fileName), e);throw new RuntimeException(String.format("创建%s文件失败,请重试", fileName));}return file;}public void deleteFile() {File sqlFile = new File(initConfigProperties.getInitFilePath() + initConfigProperties.getInitDbName());if (sqlFile.exists()) {log.info(sqlFile.getName() + " --- delete sql file result:" + sqlFile.delete());}File userFile = new File(initConfigProperties.getInitFilePath() + initConfigProperties.getInitUserName());if (userFile.exists()) {log.info(userFile.getName() + " --- delete user file result:" + userFile.delete());}dynamicDatasourceConfig.stopDataSource();// 数据初始化状态设为falseDbStatusSingleton.getInstance().setDbStatus(false);log.info("初始化数据重置完成");}
}

当我们打开该文件,选择 Refresh on selection,可以看到单个文件的统计情况。

image-20230831171247624

嗯呢,学会了吧,就不水了,本文到此结束了

关注我吧,带你学会更多的小技巧。

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

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

相关文章

Vue的使用(2)

一个简单的Vue项目的创建 创建一个UserList.vue组件 在App.vue中使用该组件 使用组件的第一步&#xff0c;导入组件使用组件的第二部&#xff0c;申明这个组件使用组件的第三步&#xff1a;引用组件 结果&#xff1a; 事件和插值语法 <template> <div><!-- te…

深度学习1.卷积神经网络-CNN

目录 卷积神经网络 – CNN CNN 解决了什么问题&#xff1f; 需要处理的数据量太大 保留图像特征 人类的视觉原理 卷积神经网络-CNN 的基本原理 卷积——提取特征 池化层&#xff08;下采样&#xff09;——数据降维&#xff0c;避免过拟合 全连接层——输出结果 CNN …

Oracle DBlink使用方法

DBlink作用&#xff1a;在当前数据库中访问另一个数据库中的表中的数据 create public database link dblink名称 connect to 对方数据库用户名 identified by 对方数据库用户密码 using (DESCRIPTION (ADDRESS_LIST (ADDRESS (PROTOCOL TCP)(HOST 要连接的数据库所在服务…

系统学习Linux-keepalived

目录 keepalived双机热备 keepalivedlvs&#xff08;DR&#xff09; 1.实验环境 先配置主调度器 web节点配置 keepalived双机热备 web服务器安装nginx和keepalived 配置好这些可以进行漂移了 复制keepalived.conf 进行修改web1为主web2为从优先级设置好 #we…

智慧仲裁 | 祝贺「璞华法律自助咨询服务平台」在成都医学城劳动纠纷一站式联处中心正式上线运营!

利用互联网开展调解&#xff0c;已成为基层调解的常态。2023年8月&#xff0c;璞华劳动人事法律自助咨询服务平台在成都医学城劳动纠纷一站式联处中心正式上线运营&#xff01; 平台可以提供智能法律咨询、法律文书模版、赔偿计算、法律法规、仲裁指引、调解指引以及各种劳动人…

springmvc没有绿标,怎么配置tomcat插件运行?

一、添加插件后&#xff0c;刷新&#xff0c;自动从maven仓库下载tomcat插件 二、写好项目后&#xff0c;添加tomcat配置 三、即可点击绿标运行

煤矿皮带运输智能监控算法 opencv

煤矿皮带运输智能监控算法通过opencvpython深度学习算法网络模型&#xff0c;煤矿皮带运输智能监控算法实时监测皮带运输过程中的各种异常情况&#xff0c;如跑偏、撕裂、堆料异常等&#xff0c;一旦检测到异常情况&#xff0c;立即发出告警并采取相应的措施&#xff0c;以保障…

matlab使用教程(29)—微分方程实例

此示例说明如何使用 MATLAB 构造几种不同类型的微分方程并求解。MATLAB 提供了多种数值算法来求解各种微分方程&#xff1a; 1.初始值问题 vanderpoldemo 是用于定义 van der Pol 方程的函数 type vanderpoldemo function dydt vanderpoldemo(t,y,Mu) %VANDERPOLDEMO Defin…

【Datawhale】AI夏令营第三期——基于论文摘要的文本分类笔记(上)

暑期参加了Datawhale的第三期AI夏令营&#xff0c;学习的是NLP方向&#xff0c;在此期间&#xff0c;我们通过比赛打榜的形式进行NLP的学习。今天&#xff0c;主要分享和记录一下这一期夏令营的学习历程和笔记。 文章目录 赛题背景赛题任务赛题数据集评价指标解题思路任务一&am…

日本排核污水:有人2天赚了800万

来谈1个非常夸张的事&#xff0c;有人2天用它搞了800多万&#xff0c;这一波完全震惊我和小伙伴&#xff0c;哪位兄弟老哥有货和资源的抓紧去搞&#xff0c;这波红利能持续好一段时间。 24号中午发生了件大事件&#xff0c;让所有人都气愤&#xff01;流量巨大&#xff0c;不管…

Vue2向Vue3过度Vuex核心概念mutations

目录 1 核心概念-mutations1.定义mutations2.格式说明3.组件中提交 mutations4.练习5.总结 2 带参数的 mutations1.目标&#xff1a;2.语法2.1 提供mutation函数&#xff08;带参数&#xff09;2.2 提交mutation 3 练习-mutations的减法功能1.步骤2.代码实现 4 练习-Vuex中的值…

动态不确定性的动态S过程(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…