Gradle 实战 - 检查不用包 -ApiHug准备-工具篇-010

  🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓

  1. GitHub - apihug/apihug.com: All abou the Apihug   
  2. apihug.com: 有爱,有温度,有质量,有信任
  3. ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace

ApiHug 整个工具链基于 Gradle, 使用 ApiHug 准备工作最先需要学习的就是 gradle. 工欲善其事,必先利其器

在开发过程中,引包一时爽,打包火葬场, 看到巨大无比的 jar 吧, 虽然磁盘空间很便宜,但是作为洁癖者,还是很不爽。

幸好有 gradle-lint-pluginopen in new window 可以帮你找出不需要的依赖。

#创建个项目


plugins{id "nebula.lint" version "17.7.0"
}description = "all the gradle trivial example"allprojects {apply plugin :"java"apply plugin :"nebula.lint"gradleLint {rules=['unused-dependency']reportFormat = 'text'}}

这个在父目录配置, 整体 lint 检查, 然后测试模块 unused-dependencies 中配置如下依赖:


dependencies {// Guava is a suite of core and expanded libraries that include utility classes, // Google's collections, I/O classes, and much more.implementation 'com.google.guava:guava:31.1-jre'//Apache HttpComponents Clientimplementation 'org.apache.httpcomponents:httpclient:4.5.13'testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'
}tasks.named('test') {useJUnitPlatform()
}

项目中使用如下:

private static void useGuava() {List<String> list = ImmutableList.of("dearxue", "is", "dear");System.out.println(list.stream().collect(Collectors.joining(" ")));
}private static void useHttpCore() {SSLContextBuilder.create();
}

触发 gradlew clean build 输出如下:


This project contains lint violations. A complete listing of the violations follows.
Because none were serious, the build's overall status was unaffected.unused-dependency                  
one or more classes in org.apache.httpcomponents:httpcore:4.4.13 are required by your code directly (no auto-fix available)warning   unused-dependency                  
this dependency is unused and can be removed 
unused-dependencies/build.gradle:10
implementation 'org.apache.httpcomponents:httpclient:4.5.13'warning   unused-dependency                  
this dependency is unused and can be removed
unused-dependencies/build.gradle:12
testImplementation 'org.junit.jupiter:junit-jupiter:5.8.1'

gradle-lint-plugin unused-dependency ruleopen in new window 有很多,不同情况下有不同的报告, all-dependency 包含如下:

  1. overridden-dependency-version
  2. unused-dependency
  3. unused-exclude-by-dep
  4. unused-exclude-by-conf

按照建议,可以运行 fixGradleLint 即可修复 -- 也就是将不用的依赖注拿掉。 Lint 带来的 tasks:


gradlew  tasks --all | grep Lint
autoLintGradle
criticalLintGradle
fixGradleLint
fixLintGradle
generateGradleLintReport
unused-dependencies:generateGradleLintReport

#几点问题

Transitive Dependencies(间接依赖) & 反射依赖, 无法很好探测。


import org.apache.http.ssl.SSLContextBuilder;private static void useHttpCore() {SSLContextBuilder.create();
}

上面的例子已经报告 需要添加: org.apache.httpcomponents:httpcore:4.4.13 依赖,其实已经由 org.apache.httpcomponents:httpclient:4.5.13 依赖引入。

gradlew unused-dependencies:dependencies --configuration compileClasspathTask :unused-dependencies:dependencies------------------------------------------------------------
Project ':unused-dependencies' - Gradle Unused Dependencies example
------------------------------------------------------------compileClasspath - Compile classpath for source set 'main'.
+--- com.google.guava:guava:31.1-jre
|    +--- com.google.guava:failureaccess:1.0.1
|    +--- com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
|    +--- com.google.code.findbugs:jsr305:3.0.2
|    +--- org.checkerframework:checker-qual:3.12.0
|    +--- com.google.errorprone:error_prone_annotations:2.11.0
|    \--- com.google.j2objc:j2objc-annotations:1.3
\--- org.apache.httpcomponents:httpclient:4.5.13+--- org.apache.httpcomponents:httpcore:4.4.13+--- commons-logging:commons-logging:1.2\--- commons-codec:commons-codec:1.11

同时反射的内容也无法识别:


private static void useHttpClientWithReflection() {try {Class<?> httpBuilder = Class.forName("org.apache.http.impl.client.HttpClientBuilder");Method create = httpBuilder.getMethod("create", null);create.invoke(httpBuilder, null);} catch (Exception e) {e.printStackTrace();}
}

其他冲突比如 annotation processor: Lombok 编译时自动生成 Getter/Setter 和构造器的工具, 也会导致 unused 报告。

剔除检查规则比如:

gradleLint.ignore('unused-dependency') {compileOnly group: 'org.projectlombok', name: 'lombok', version:'1.16.20'
}

#报告

gradlew generateGradleLintReport 命令, 导出内容我们上面看到差不多。

例子项目在: unused-dependencies Example

我们

api-hug-contact

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

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

相关文章

Vue - 5( 11000 字 Vue2 入门级教程)

一&#xff1a;Vue 初阶 1.1 组件自定义事件 在 Vue 中&#xff0c;组件间通过自定义事件进行通信是一种常见的模式。自定义事件允许子组件向父组件发送消息&#xff0c;也可以在组件内部进行事件的绑定、触发和解绑。让我们详细讲解这些知识点。 1.1.1 组件自定义事件 在 …

【位运算】Leetcode 判定字符是否唯一

题目解析 算法讲解 正常思路&#xff1a;使用unordered_map判断并保存每一个字符出现的次数&#xff0c;如果当前的字符在添加到Hash之前已经出现了一次了&#xff0c;直接返回false&#xff0c;反之循环结束返回true 优化思路&#xff1a;可以使用位图来充当Hash表&#xff…

2024年危险化学品经营单位安全管理人员证考试题库及试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年危险化学品经营单位安全管理人员证考试题库及危险化学品经营单位安全管理人员试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff0…

酷开科技OTT大屏营销:开启新时代的营销革命

随着互联网技术的不断发展和普及&#xff0c;大屏已经成为越来越多家庭选择的娱乐方式。在这个背景下&#xff0c;酷开科技凭借其强大的技术实力和敏锐的市场洞察力&#xff0c;成功地将大屏转化为一种新的营销渠道&#xff0c;为品牌和企业带来了前所未有的商业机会。 酷开科技…

阿里云大学生免费申请7个月云服务器,免费续费半年

2024年阿里云学生服务器免费申请&#xff0c;完成学生认证可以领取1个月免费学生机&#xff0c;完成任务可以再免费学费6个月时长&#xff0c;还可以领取高校计划学生300元无门槛优惠代金券&#xff0c;阿里云服务器网aliyunfuwuqi.com整理2024年最新阿里云大学生服务器申请入口…

AndroidAutomotive模块介绍(一)整体介绍

前言 Android Automotive 是一个基本 Android 平台&#xff0c;可运行 IVI 系统中预安装的 Android 应用以及可选的第二方和第三方 Android 应用。 本系列文档将会系统的介绍 Android Automotive 的功能、架构、逻辑等。模块逻辑将从 应用api接口、系统服务、底层服务&#x…

PostgreSQL数据库基础--简易版

数据库 其中runoobdb为数据库名 查看已经存在的数据库 \l进入数据库 \c runoobdb创建数据库 CREATE DATABASE runoobdb;删除数据库 DROP DATABASE runoobdb;表 其中COMPANY为表名 创建表格 CREATE TABLE COMPANY(ID INT PRIMARY KEY NOT NULL,NAME TEXT…

DedeCMS 未授权远程命令执行漏洞分析

dedecms介绍 DedeCMS是国内专业的PHP网站内容管理系统-织梦内容管理系统&#xff0c;采用XML名字空间风格核心模板&#xff1a;模板全部使用文件形式保存&#xff0c;对用户设计模板、网站升级转移均提供很大的便利&#xff0c;健壮的模板标签为站长DIY自己的网站提供了强有力…

Vim:强大的文本编辑器

文章目录 Vim&#xff1a;强大的文本编辑器Vim的模式命令模式常用操作光标移动文本编辑查找和替换 底行命令模式常用操作Vim的多窗口操作批量注释与去注释Vim插件推荐&#xff1a;vimforcpp结论 Vim&#xff1a;强大的文本编辑器 Vim&#xff0c;代表 Vi IMproved&#xff0c;…

SpringAI初体验之HelloWorld

目录 前言1.准备工作2.初始化项目3.解决问题3.1 Connection Time out 连接超时问题3.2 You exceeded your current quota 额度超限问题 4.访问调用5.总结 前言 在逛SpringBoot页面时突然看到页面上新增了一个SpringAI项目,于是试了一下&#xff0c;感觉还行。其实就是封装了各家…

业务架构扩展六大元素

背景 目前主流的业务架构就是价值流能力&#xff0c;在这套架构体系中&#xff0c;有四个核心元素&#xff0c;分别是价值流、业务能力、信息、组织。上个章节已经讲述&#xff1a; 业务架构的四大核心元素-CSDN博客 这一节&#xff0c;对于外围的六个扩展元素&#xff0c;逐…

react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

先看样子 组件代码&#xff1a; import React, { useState, useEffect } from react import { Row, Col, Modal, Spin, Input, Button, message, Form } from antd import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from ant-design/icons import * as Serve from …