最近研究 sofa-ark的插件机制时,发现当执行完 maven clean install -DskipTests 时,打在 target 目录下的 xxx.jar 与安装到本地仓库的 xxx.jar 大小不一致。 target 目录下的插件大小 ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_1_20190723035548566)
.m2 下的插件大小 ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_2_20190723035548722)
其实一开始看到这种现象也是懵逼,同一个工程,同一次命令执行,但是得到的两个 jar 包大小差距巨大。那么对于这种问题,我想到的有两点: debug 打包插件执行过程 了解 maven 插件的生命周期
01 debug 打包插件执行过程这里需要借助 IDEA 中的远程 debug 能力来完成。目前有两个工程,一个是我们的主工程,工程名为上面截图中的 mq-client-ark-plugin ,另一个是打包插件的源码工程,如下图所示: ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_3_20190723035548800)
那么下面就一步一步来完成远程 debug 的配置。 (1)使用 mvnDebug 命令开启 debug 模式在主工程 mq-client-ark-plugin 的根目录下执行 mvnDebug install (当然除了 install 之外,也可以是 compile 、package 、test 、deploy 等)。 ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_4_20190723035548894)
当执行完 mvnDebug install 后,可以看到这个阻塞监听 8000 端口了。 (2)源码工程配置远程 debug在 idea 主界面找下下图的工具菜单,选择 Edit Configurations... 打开配置面板之后,左上角 选择 Remote ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_6_2019072303554934)
填写相关远程 debug 参数 ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_7_20190723035549128)
Host : 远程目标主机地址,因为之前 主工程也是本地启动的,所以这里就是 localhost
Port : 远程目标主机开启的远程 debug 端口
开启远程 debug 参数:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
配置完成之后,执行 debug ,可以看下已经连接到了目标机器: ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_8_20190723035549206)
在来看主工程这里,在源码工程没有执行上面的 debug 按钮之前,一直都是阻塞的,执行之后 maven 执行的生命周期开始了: ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_9_20190723035549284)
如上图,因为在源码工程中打了断点,所以当执行到 sofa-ark-maven-plugin 插件时阻塞了。 02 从 maven 执行的生命周期找出问题根源上面已经搞定了对目标插件源码的 debug 模式的开启,那么下面就是对插件代码进行 debug 操作。节省篇幅,这里直接将断点放在目标代码行位置: ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_10_20190723035549394)
分析这段代码 ![1](http://pubimage.360doc.com/wz/default.gif)
![1](http://pubimage.360doc.com/wz/default.gif)
如果单从上面 debug 来看,其实很难解释开篇的那个问题。那么这里在回过头来看下 主工程的 maven 执行日志: ![1](http://pubimage.360doc.com/wz/default.gif)
如上图中圈红的部分,代表 maven install 所经历的所有阶段。可以看到 sofa-ark-plugin-maven-plugin 是在 maven-install-plugin 后面,那这意味着什么呢?
我们知道在 target 目录下得到的 xxx.jar 是打包阶段的产物,而 .m2 下面的是 install 的产物。 当然这里没有涉及到 deploy ,deploy 是 install 之后的操作,比如发布到远程仓库。
现在再来看,因为 sofa-ark-plugin-maven-plugin 在执行 install 插件之前将 目标文件给替换了,所以导致打包生成的 target 目录下的 xxx.jar 和 安装到本地仓库的 xxx.jar 不一致。 03 小结本文记录了日常的一个问题排查过程,包括两个小点,一个是如何去 debug maven 的插件,另外一个是简单了解下 maven 打包的生命周期。 来源:https://www./content-4-348301.html
|