最近研究 sofa-ark 的插件机制时,发现当执行完 maven clean install -DskipTests
时,打在 target 目录下的 xxx.jar
与安装到本地仓库的 xxx.jar
大小不一致。
target 目录下的插件大小
.m2 下的插件大小
其实一开始看到这种现象也是懵逼,同一个工程,同一次命令执行,但是得到的两个 jar 包大小差距巨大。那么对于这种问题,我想到的有两点:
这里需要借助 IDEA 中的远程 debug 能力来完成。目前有两个工程,一个是我们的主工程,工程名为上面截图中的 mq-client-ark-plugin ,另一个是打包插件的源码工程,如下图所示:
那么下面就一步一步来完成远程 debug
的配置。
在主工程 mq-client-ark-plugin
的根目录下执行 mvnDebug install
(当然除了 install
之外,也可以是 compile
、 package
、 test
、 deploy
等)。
当执行完 mvnDebug install
后,可以看到这个阻塞监听 8000 端口了。
在 idea
主界面找下下图的工具菜单,选择 Edit Configurations...
+
选择
Remote
填写相关远程 debug 参数
Host
: 远程目标主机地址,因为之前 主工程也是本地启动的,所以这里就是 localhost
Port
: 远程目标主机开启的远程 debug
端口 debug
参数: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000
配置完成之后,执行 debug
,可以看下已经连接到了目标机器:
在来看主工程这里,在源码工程没有执行上面的 debug
按钮之前,一直都是阻塞的,执行之后 maven
执行的生命周期开始了:
如上图,因为在源码工程中打了断点,所以当执行到 sofa-ark-maven-plugin
插件时阻塞了。
上面已经搞定了对目标插件源码的 debug
模式的开启,那么下面就是对插件代码进行 debug
操作。节省篇幅,这里直接将断点放在目标代码行位置:
分析这段代码
Artifact
,此时 Artifact
的 file
为:
File
artifact
如果单从上面 debug
来看,其实很难解释开篇的那个问题。那么这里在回过头来看下 主工程的 maven
执行日志:
如上图中圈红的部分,代表 maven install
所经历的所有阶段。可以看到 sofa-ark-plugin-maven-plugin
是在 maven-install-plugin
后面,那这意味着什么呢?
当然这里没有涉及到 deploy
, deploy
是 install
之后的操作,比如发布到远程仓库。
现在再来看,因为 sofa-ark-plugin-maven-plugin
在执行 install
插件之前将 目标文件给替换了,所以导致打包生成的 target
目录下的 xxx.jar
和 安装到本地仓库的 xxx.jar
不一致。