Maven容器的下半场:Guice 前言 在前面的文章里,Maven底层容器Plexus Container的前世今生,一代芳华终落幕,我们提到,在Plexus Container退任后,取而代之的底层容器是Guice. Guice的应用也还比较广泛,以下轮子中(仅部分)都有它活跃的身影: google内部 scalatest TestNG Caffeine Cache Spring Security Config elastic search jenkins 这很多轮子,都是直接用的Guice…
Maven源码调试工程搭建 思路 我们前面的文章<[曹工杂谈]Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗>分析了Maven大体的执行阶段,主要包括三个阶段: 启动类阶段,负责加载框架: 框架核心(maven core)阶段,主要负责根据参数中的goal,如clean,找到对应的插件的jar包,生成插件对象,解析参数并调用插件代码: 插件执行阶段,执行完成后,控制权会交还给框架核心,由maven core完成善后工作. 这三个阶段,分别会去不同的地方加载对应的jar包. 大概了解了…
背景 去年写了一篇"[曹工杂谈]Mysql客户端上,时间为啥和本地差了整整13个小时,就离谱",结果最近还真就用上了. 不是我用上,是组内一位同事,他也是这样:有个服务往数据库insert记录,记录里有时间,比如时间A.然后写进数据库后,数据库里的时间是A-13,晚了13小时.然后就改了这么个地方: 写进去的数据,就是正确的时间了. 后边,他还有一个查询服务,要去查写进去那条记录,比如记录有个创建时间字段,字段值是2022-02-19 00:00:00. 然后假设我查的时候,就根据这个…
Google Guice容器内部有什么 前言 Maven系列,好几天没写了,主要是这几天被Google Guice卡住了,本来是可以随便带过Guice,讲讲guice的用法就够了(这个已经讲了,在前面的文章),但是,想着guice作为maven的底层IOC容器,对guice的理解深入一些,对后续的Maven源码学习也会比较有帮助,因此,就在那开始分析guice的源码. guice作为一个仅次于Spring的IOC容器,代码也不是那么好懂的,毕竟也迭代了十来年了:代码量不少,另外,我感觉代码也有点…
Maven底层容器Plexus Container的前世今生,一代芳华终落幕 前言 说实话,我非常地纠结,大家平时只是用Maven,对于内部的实现其实也不关心,我现在非要拉着大家给大家讲.这就有个问题,Maven的内部,还是相对没那么简单的,也算是个不小的工程了. 核心功能,大家是清楚的,内部的执行流程,大家也大概猜的出来: 解析命令行参数 准备各种上下文,简单的mvn clean就涉及到当前项目的元数据pom.xml.settings.xml(主要是本地.远程仓库相关): 根据mvn clea…
前言 今天新年第一天,给大家拜个年,祝大家新的一年里,技术突突突,头发长长长! 咱们搞技术的,比较直接,那就开始吧.我给大家看看我demo工程的效果(代码下边会给大家的): 技术栈是mybatis/mybatis plus,spring boot ,日志是logback. 其实这个痛点吧,我是一直有的,测试或者开发时,日志里每次打印的都是带?的sql,然后还得自己手动一个参数一个参数地贴过去,这真是一个体力活.虽然是体力活,还是做了这么多年了,这次,终于决定不忍了. 在弄这个之前呢,我知道ide…
前言 问:标题说的什么意思? 答:简单说,一个spring boot应用(我这里,版本升到2.1.7.Release了,没什么问题),默认使用了tomcat作为底层容器来接收和处理连接. 我这里,在依赖中排除了tomcat,使用Netty作为了替代品.优势在于,启动飞快,线程数量完全可控(多少个netty的boss.worker线程,多少个业务线程),如果能优化得好,效率会很高(我这个还有很多优化空间,见文末总结) 流程图如下(中间的三个handler是自定义的): 这个东西,年初我就弄出来了,…
前言 今年的更新频率简直是降至冰点了,一方面平时加班相对多一些了,下班只想玩手机:另一方面,好像进了大厂后,学习动力也很低了,总之就,很懒散,博客的话,今年都才只更新了不到5篇. 现在慢慢有一点状态,开始学点技术:今天这篇就是讲maven插件,为啥会折腾这个,公司内有个mybatis generator,针对公司内部做了一些定制开发,具体内容不知道,但是,有个很蛋疼的问题,在根据数据库表,反向生成po的时候,不能把数据库表的字段的注释,给生成为po的field 注释. 之前试过自己折腾一下,解决…
Maven和Tomcat能有啥联系呢,都穿打补丁的衣服吗 前奏 我们上篇文章,跟大家说了下,怎么调试maven插件的代码,注意,是插件的代码.插件,是要让主框架来执行的,主框架是谁呢,就是maven core,可以称之为maven核心吧. maven核心,类似于tomcat,而maven插件就类似于我们部署在tomcat中的webapp应用.估计有人觉得,这个类比有点生硬,不过我也是有我自己的依据的. 下面开始正文. tomcat的类分散在哪几处 按照简单的模型来分,三处: 1.bin下边的启动…
说说Maven框架和插件的契约 前言 Maven框架就像现在公司内的各种平台方,规定一些契约,然后想办法拉动业务方,一起在这个平台上去做生态共建.Maven也是这样,其实它就是一个插件执行的框架,Maven刚开始肯定不知道会有谁去贡献插件,插件如果写得五花八门的话,那对于平台方来说,可能就是一个灾难,所以,平台方就要负责定标准,要在我平台上写插件,必须怎么怎么样. Maven给插件就定了契约,这个契约,是通过api jar包的方式.每次发布Maven新版本,与之伴随的,都会有一个api jar包…