最近研究 sofa-ark的插件機制時,發(fā)現當執(zhí)行完 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)
其實一開始看到這種現象也是懵逼,同一個工程,同一次命令執(zhí)行,但是得到的兩個 jar 包大小差距巨大。那么對于這種問題,我想到的有兩點: debug 打包插件執(zhí)行過程 了解 maven 插件的生命周期
01 debug 打包插件執(zhí)行過程這里需要借助 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 的根目錄下執(zhí)行 mvnDebug install (當然除了 install 之外,也可以是 compile 、package 、test 、deploy 等)。 ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_4_20190723035548894)
當執(zhí)行完 mvnDebug install 后,可以看到這個阻塞監(jiān)聽 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
配置完成之后,執(zhí)行 debug ,可以看下已經連接到了目標機器: ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_8_20190723035549206)
在來看主工程這里,在源碼工程沒有執(zhí)行上面的 debug 按鈕之前,一直都是阻塞的,執(zhí)行之后 maven 執(zhí)行的生命周期開始了: ![1](http://image109.360doc.com/DownloadImg/2019/07/2315/166700484_9_20190723035549284)
如上圖,因為在源碼工程中打了斷點,所以當執(zhí)行到 sofa-ark-maven-plugin 插件時阻塞了。 02 從 maven 執(zhí)行的生命周期找出問題根源上面已經搞定了對目標插件源碼的 debug 模式的開啟,那么下面就是對插件代碼進行 debug 操作。節(jié)省篇幅,這里直接將斷點放在目標代碼行位置: ![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 執(zhí)行日志: ![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 之后的操作,比如發(fā)布到遠程倉庫。
現在再來看,因為 sofa-ark-plugin-maven-plugin 在執(zhí)行 install 插件之前將 目標文件給替換了,所以導致打包生成的 target 目錄下的 xxx.jar 和 安裝到本地倉庫的 xxx.jar 不一致。 03 小結本文記錄了日常的一個問題排查過程,包括兩個小點,一個是如何去 debug maven 的插件,另外一個是簡單了解下 maven 打包的生命周期。 來源:https://www./content-4-348301.html
|