前言: 前文:你了解SpringBoot启动时API相关信息是用什么数据结构存储的吗?(上篇) 写文的原因,我前文说过就不再复述了。...问题大致如下: 为什么浏览器向后端发起请求时,就知道要找的是哪一个接口?采用了什么样的匹配规则呢? SpringBoot 后端是如何存储 API 接口信息的?又是拿什么数据结构存储的呢?...如果找到多个匹配项,则选择最佳匹配项 // 这里就关系到了我们是如何进行匹配的啦。...写到这里基本可以回答完文前所说的三个问题了。 他问的是为什么浏览器在向后端发起请求的时候,就知道要找的是哪一个API 接口,你们 SpringBoot 后端框架是如何存储API接口的信息的?...第三个答案:我们之前看到存储信息时,都是 HashMap 相关的类来存储的,那么我们可以知道它底层的数据结构就是 数组+链表+红黑树 三、后语 若不是小伙伴提起那三问,我想我也不会有如此兴致,去一步一步
所以,我开始向ChatGPT提出我的需求 于是给出了以下这些对话 当我一步一步按照它给我的步骤来实现时。前面还是挺顺的。 首先是添加方式。直接在这里就能添加了 刚开始的时候。...看到有其他Chrome插件能直接导出导入数据,但是我在Chrome的extends里确实没看到文件。有大佬知道Chrome插件的数据保存在哪里的可以方便告知一下。...baidu.com 然后运行发现是能正常运行的 现在的问题就是如何利用快捷键来实现把Chrome的地址栏添加到文件夹里面了。...开发Chrome插件的经验较少,所以目前不太知道如何设定一个快捷键来实现这一功能 于是曲线救国,在这里 曾经分享过如何来利用alfred来实现对一些快捷操作来完成的。...这里的思路也借鉴这里 首先是自定义一个快捷键。来唤起。当然自定义的这个快捷键要跟其他的没有冲突才行 首先想的是定义三个快捷键。然后在最后一个快捷键来对一个脚本的执行。比如 a.
从本篇开始,打算从广义上探究一下移动架构的思想;包括现在仍然比较火热的模块化,组件化, 插件化等架构思想。...模块的好处是什么? 相比于包来讲,模块更灵活,耦合更低,随意插拔,想引入哪个就引入哪个。根据不同的关注点,将一个项目的可以共享的部分抽取出来,形成独立的Module,就是模块化。...插件化可以说朋友圈就是一个app, 我需要整合了,把它整合进微信这个大的app里面 其实从框架名称就可以看出: 组 和 插。...5、通信方式 模块化的通信方式,无非是相互引入;我抽取了common, 其他模块使用自然要引入这个module 组件化的通信方式,按理说可以划分为多种,主流的是隐式和路由。...配置文件定义好了,那么如何引入呢? 在[Project]下的build.gradle引入配置文件 !
我们将会从 Gradle 的构建阶段开始,讨论如何使用 AGP (Android Gradle Plugin) 的配置选项自定义您的构建,并讨论如何使您的构建保持高效。...无论当前的 Android 项目是应用还是依赖库,Android Gradle 插件都知道如何对其进行构建和打包。...为了让 Gradle 知道我正在构建 Android 项目,我需要应用 com.android.application 或 com.android.library 插件。...这两个插件分别定义了如何配置和构建 Android 应用和依赖库。在本例中,我要构建的是 Android 应用项目,所以我需要应用 com.android.application 插件。...需要注意的是,无论您请求执行哪个 Task,配置阶段都会执行。为了保持您的构建简洁高效,请避免在配置阶段执行任何耗时操作。
在学习 Compose 的时候,有没有同学有一种困惑,Compose 到底是哪个 AGP 版本开始支持的,然后还会听到一些声音说,Compose 从 AGP 7.x 才开始支持,可当我使用 IntelliJ...如果反编译过 Compose 项目的想必都知道,@Composable 注解下的方法会被生成各种 $composer 代码,那这块代码是谁来生成的呢?...编译: image.png 依赖梳理 现在我们已经知道了 Compose 是怎么参与 KGP 编译的了,那么,他们的依赖关系是什么样的呢?...依赖进来,所以,版本跟随 KGP TGP 是霍老师的插件,直接在 build.gradle 通过 classpath 引入 一点疑惑: compose compiler 为啥不做成单独插件呢?...这样就可以从 AGP 里面剥离出来,通过 classpath 直接引入来减少版本困扰,现在改个 Compose 版本需要涉及 KGP 和 AGP KGP 主要是 KCP 编译相关的东西,为啥又要将 android
那么,Gradle 是如何分开来管理每个子工程的构建任务的呢?...以上就是我对于 Gradle 插件概念的理解,我认为它是用于给大伙可以根据需要自行去扩展。...Gradle 在根据 build.gradle 构建 Module 时,怎么知道要使用哪个插件呢,声明了这么多。...最开始接触的时候,我看到这里是有些迷茫的,怎么有一个 Gradle 版本,又有一个 Android Gradle 版本。...所以,你应该去搜的是如何下载,Android Gradle 插件并没有被墙,如果想自行下载,可以参考我之前的博客: 如何用Android Studio查看build.gradle源码,而至于 Gradle
是通过gitlab进行代码管理。 那么如何采用Jenkins将项目从GitLab上拉取。并进行构造打包成apk。 先从最基本简单的方法来实现。 1.准备工作 我们都知道如果要打包Android 。...例如我的Git上有两个分支,一个是默认的master分支,一个是我新开的v2.0分支 那么我们可以如下配置: 其他的配置项,我们可以暂时不用理会。...如果我们本地有安装很多Gradle 插件,那么可以在下拉列表中选择。如果没有的话。 就会显示Default。我们在编译后,就会出现Gradle.bat 文件找不到的错误了。...建议进行安装之后,再进行选择 例如: (PS:如果不知道安装可以参考我的这篇文章:Jenkins 构造失败,控制台输出:gradle.bat 不是内部或者外部命令 -解决方法 (zinyan.com)...2.6 构建后操作 我们配置完毕后,就要配置构建后的存储路径了。 这个路径,不是说JenKins帮我们存储的路径。而是告诉jenkins 从哪个目录下获取构造结果。
因为Gradle创建所有工程的依赖模型都是从Project的根目录开始的。 The build lifecycle revisited 了解构建过程模型会有助于理解多Module工程的打包。...Gradle总是会根据根目录来配置依赖关系。 一旦你知道了构建过程Model是如何把他们放到一起的时候,我们也就知道了配置多Module的构建配置。...') } 这也告诉Gradle去引入一个名为javalib的模块。...而war插件是后端运行和分发的重要的插件,这个插件会生成一个War文件,可以在Java Web应用中被应用。最后appengine插件可以加载一系列构建的Task,执行并且部署后端。...随着电脑的核越来越多,我们可以让构建的过程并行处理。该特性已经在Gradle中存在了,但是默认是不可用的。
系列三:如何用Adnroid Studio查看build.gradle源码 ... ---- 正文 我们来举个例子,就像系列一的博客里介绍的 build.gradle 里有这样一段代码: ?...build.gradle 咦!这代码是第一次在 build.gradle 里看见过,是什么意思呢?不怕,我有绝招: ?...BaseExtension.class 是跳到源码了,可是为什么没有方法的注释说明呢,这方法是什么鬼谁知道啊。再仔细看看 as 的提示,原来打开的是个 class 文件啊。 ?...既然知道问题,那么就好解决了,as 的提示条也没有下载的按钮,那我们就自己去下载好了 ? seach.maven.org 打开 maven 网站,在这里可以下载 gradle 插件。...BaseExtension.java 这里就可以看到源码里介绍 Plugin 的值都有哪些,分别对应哪个类,该去哪个类看它的作用是什么,干什么的。 ?
背景 Android是如何进行编译的? 项目中的源代码是如何一步步被执行为可以安装到手机上的apk的? 文章会一一给大家介绍,尽量以代码为例,好让大家快速理解。 文末有福利~ 1....,Gradle是构建工具,而AGP是管理Android编译的插件,是一群java程序的集合。.../gradlew assembleDebug --scan 1)基于这个报告,我们可以分析编译耗时的task 2)分析依赖情况(当然本地也可以) 可以知道具体被打包进apk的aar版本究竟是哪个...例如如果要查看dexbuilder阶段的源码,通过上述图片中的task名称“DexArchiveBuilderTask”直接全局搜索即可 这样我们就能知道Android究竟是如何一步步进行编译的。...AGP断点调试 当然,光知道源码在哪是不够的,想清楚知道AGP的每个执行细节,需要有能够调试的手段,所以AGP的调试手段就很有必要了。
在buildscript{}里面,所以代表的是Gradle需要的插件。...5.build.gradle(Module) 5.1 Gradle插件 首先我们先看: image.png 这种叫做引入Gradle插件,而Gradle插件大致分为分为两种: apply...plugin:'×××':这种属于二进制插件,一般是被打包在jar里独自发布,如果你自定义过插件,你就会知道,通常在发布的时候要指定plugin id,默认为完全限定名。...minSdkVersion 是支持的Android系统的api level targetSdkVersion 表明我们是基于哪个Android版本开发的,也就是开发版本 versionCode...,我上一篇文章有详解过,这里就不说了参考Android -Gradle依赖导入及相关知识
前言 一个简单的Gralde脚本,主要包含如下内容,其中标明可选的都是可以删掉的部分: 插件引入:声明你所需的插件---如 apply plugin: 'java' 属性定义(可选):定义扩展属性---...) buildScript { repositories { mavenCentral() } } //应用插件,这里引入了Gradle的Java插件,此插件提供了Java...可声明用于编译和执行构建脚本的类路径。该类路径也用于加载构建脚本使用的插件。 简单说即设置脚本的运行环境。 buildscript中的声明是gradle脚本自身需要使用的资源。...可以声明的资源包括依赖项、第三方插件、maven仓库地址等。 而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源。...依赖包的定义。支持maven/ivy,远程,本地库,也支持单文件,如果前面定义了repositories{}maven 库,使用maven的依赖(我没接触过ivy。。)
哎,怎么我的classpath里的某个包有三四个不同的版本啊,跑的时候到底用的是哪个版本啊?不管了,反正差不多,先跑跑看。 哎,我怎么直接就可以用这个类了,这个类是哪个包引的?...在Gradle5.0中引入了"java-library"插件,试图让组件开发方在编写组件代码时,主动控制好自己的依赖是否暴露给组件接入方(这个插件在老版本中也有,不过只有在5.0版本中在真正有用)。...我们知道,在用打包插件对springboot项目进行打包时,打出来的那一个jar包是可以直接通过java -jar直接运行的。...慢着,我们在打包时都没有指定Main-Class,如果是非SpringBoot项目,甚至都没有加@SpringBootApplication注解,那么打包插件是怎么知道我要运行的是哪一个类呢?...目前采用的日志框架是蚂蚁内部的框架,实在是太丑陋,而且不支持关闭,用起来很难受。 没有官方gradle插件,且开发组据说一时半会也不会考虑支持。
插件的区别,也清楚了为什么有时候打开 Github 上的项目时会一直处于构建中,也知道了如何去解决。...那么,本篇,我们继续往下来学习,build.gradle 文件里各个配置项的作用,以及如何用 Gradle 来写脚本帮助我们做一些重复性的手工工作。...在 2.3.3 版本的 Android Gradle 插件中,这个 id 指向的类为 AppPlugin apply plugin 意思是为当前项目的构建应用一个 Gradle 插件,至于应用哪个插件,...上述代码中两种方式是等效的,因为 Android Gradle 插件已经通过一份配置文件,将这两者绑定在一起,使用者不清楚具体要用哪个插件类的话,那么可以直接使用跟它对应的 id 值即可,而且通过 id...5.7 buildToolsVersion 这个是用来配置要使用哪个版本的 Android 构建工具。
不过这都是暂时的,下个月我忙完手头的事情,业余时间仍然会持续尝试 Kotlin 的各种玩法,届时将继续给大家分享一些好玩的东西。 下面是正题!...IntelliJ 全家桶(当然你应该知道这也应该包括 Android Studio)的快捷键对应于 “Action”,换句话说,只要是个 Action,你就可以配置快捷键,例如当你的 Gradle 文件被修改时...这个按钮是一个很常用的东西,我把它的快捷键设置为了 "cmd+shift+s"。...安装 Key Promoter X 插件 很多时候你总是用鼠标点击,你意识不到这东西居然可以设置快捷键,就算要设置快捷键,那么你可能也不知道给哪个 Action 设置,所以请先安装一款插件: Key Promoter...小结 有了这个插件,妈妈再也不用担心我找不到快捷键(设置的地方),从此工作效率提升8倍,终于可以愉快的一个人干三个人的活挣更多的小钱钱啦! ?
通过上篇文章《Gradle 与 AGP 构建 API: 配置您的构建文件》您已经了解 Gradle 的基础知识以及如何配置 Android Gradle Plugin。...在本文中,您将学习如何通过编写您自己的插件来扩展您的构建。如果您更喜欢通过视频了解此内容,请在 此处 查看。...配置阶段是进行 Task 配置以作用于其执行的阶段。您可以在此阶段确定 Task 的输入、参数,以及输出的位置。 无论请求运行哪个 Task,配置阶段都会执行。...添加自定义 Task 到 build.gradle 文件是创建自定义构建脚本的方便法门。不过,在我的插件代码变得愈发复杂时,这种方式不利于进行扩展。...注意,如果我的项目含有多个模块,我也可以通过将此插件加入其他 build.gradle 文件来复用它。
然后创建工程,我这里使用gradle创建一个IntelliJ platform plugin的工程,如果你没有启用devkit插件的话,这里应该是找不到intellij platform plugin这个选项的...而我们要编写一个静态代码审计插件的难点也就在「到底该使用哪个接口来进行代码检查」以及「SDK都提供了哪些工具或方法来方便我们完成代码审计」,只要克服了这两个问题,从AST里去找代码中可能存在的问题也就变得千篇一律了...模块以及comparing_references_inspection模块(尤其是这个模块)给了我们提示,通过这两个模块我知道了在intellij platform上进行自动化代码检查需要用到的功能被称作...上图左侧是我们的源代码,右侧是psiviewer插件窗口,当我们在把光标停留在源码某处时,psiviewer窗口会对应展示我们正处在AST树的哪个位置,反过来,当我们在psiviewer窗口中选中ast...我又来要赞?,如果你觉得本文写的不错就点个赞,有帮助就点个在看,如果你分享到朋友圈了,什么都别说了,好兄弟!你懂我!各位股东们的一键三连是我持续真诚写作的最大动力✌️
在此版本中,我们调整了 Android Studio 和 Gradle 插件的版本编号方案。...此项变更将 Gradle 插件从 Android Studio 的版本编号方案中剥离,并使 Android Studio 的每个版本对应于哪个年份和 IntelliJ 版本变得更加清晰。...新的版本编号方案会引入几项重要属性: 年份、所基于的 IntelliJ 版本以及功能和补丁程序级别。...为便于更新,我们对版本进行了更改,将 Android Studio 与 Android Gradle 插件版本进行了明确的分离。...Android Gradle 插件的新版本编号方案 在 AGP 7.0.0 中,我们采用了 语义化版本 的原则,并与 AGP 所需的 Gradle 版本保持一致。
为什么要用,我们需要吗 最初,我使用checkstyle是因为公司要求,在经历过一段痛苦的格式重构阶段后,渐渐习惯了这样的格式。到后来,我新建项目就会把这个加进去,最多改几条规则。...事实上,maven会在项目生命周期中自动执行,我添加这个插件的原因是在idea里的java编译级别需要根据这里来指定。...中的哪个命令上,这里是绑定到install上,即当执行maven install的时候会执行本plugin。...goals>goal 一个plugin有多个goals,即任务,是指绑定执行哪个任务。...纠结了半天就妥协了,就自己看xml结果吧,知道具体的class之后再结合idea checkstyle插件来修改就行。
查看这个面板可以告诉我们构建应用的哪个步骤是最耗时的。 ? 当展开列表来查看这些任务的时候,每个任务会根据来源显示为不同的颜色。...这样分组会让我可以观察到,我项目构建的大部分时间是在执行来自核心插件的任务,比如 Kotlin 或者 Android Gradle 的插件。...构建分析器如何工作 每当您使用 Android Studio 构建您的项目,构建分析器会使用 Gradle Tooling API 和 Android Gradle Plugin 在本地收集数据。...如果您认为这个问题来自构建分析器本身,请通过我们的 issue tracker 来让我们知道。 如果您有兴趣深入理解您的项目构建,请尝试用 Gradle Scan 来获取更多额外的信息。...我们热切地希望了解人们是如何使用这个工具,同时我们也会继续改进跳转浏览、图形化和其他相关组件。如果您有任何反馈,尤其是那些您在自己的项目构建中发现的,但是没有被我们的分析器捕获到的问题,请告知我们。
领取专属 10元无门槛券
手把手带您无忧上云