分享

maven 插件打包问题的排查,懂了吗?

 印度阿三17 2019-07-23

最近研究 sofa-ark的插件机制时,发现当执行完 maven clean install -DskipTests 时,打在 target 目录下的 xxx.jar 与安装到本地仓库的 xxx.jar 大小不一致。

  • target 目录下的插件大小

    1

  • .m2 下的插件大小

    1

其实一开始看到这种现象也是懵逼,同一个工程,同一次命令执行,但是得到的两个 jar 包大小差距巨大。那么对于这种问题,我想到的有两点:

  • debug 打包插件执行过程

  • 了解 maven 插件的生命周期

01 debug 打包插件执行过程

这里需要借助 IDEA 中的远程 debug 能力来完成。目前有两个工程,一个是我们的主工程,工程名为上面截图中的 mq-client-ark-plugin ,另一个是打包插件的源码工程,如下图所示:

1

那么下面就一步一步来完成远程 debug 的配置。

(1)使用 mvnDebug 命令开启 debug 模式

在主工程 mq-client-ark-plugin 的根目录下执行  mvnDebug install(当然除了 install 之外,也可以是 compilepackagetestdeploy 等)。

1

当执行完 mvnDebug install 后,可以看到这个阻塞监听 8000 端口了。

(2)源码工程配置远程 debug

idea 主界面找下下图的工具菜单,选择 Edit Configurations...

1打开配置面板之后,左上角 选择 Remote1

填写相关远程 debug 参数

1

  • Host : 远程目标主机地址,因为之前 主工程也是本地启动的,所以这里就是 localhost

  • Port : 远程目标主机开启的远程 debug 端口

  • 开启远程 debug 参数:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8000

配置完成之后,执行 debug ,可以看下已经连接到了目标机器:

1

在来看主工程这里,在源码工程没有执行上面的 debug 按钮之前,一直都是阻塞的,执行之后 maven 执行的生命周期开始了:

1

如上图,因为在源码工程中打了断点,所以当执行到 sofa-ark-maven-plugin 插件时阻塞了。

02 从 maven 执行的生命周期找出问题根源

上面已经搞定了对目标插件源码的 debug 模式的开启,那么下面就是对插件代码进行 debug 操作。节省篇幅,这里直接将断点放在目标代码行位置:

1

分析这段代码

1

  • 1、获取到项目的 Artifact ,此时 Artifactfile 为:1

  • 2、重新设置的 File

  • 3、重新设置了 artifact

1

如果单从上面 debug 来看,其实很难解释开篇的那个问题。那么这里在回过头来看下 主工程的 maven 执行日志:

1

如上图中圈红的部分,代表 maven install 所经历的所有阶段。可以看到 sofa-ark-plugin-maven-plugin 是在  maven-install-plugin 后面,那这意味着什么呢?

我们知道在 target 目录下得到的 xxx.jar 是打包阶段的产物,而 .m2 下面的是 install 的产物。

当然这里没有涉及到 deploydeployinstall 之后的操作,比如发布到远程仓库。

现在再来看,因为 sofa-ark-plugin-maven-plugin 在执行 install 插件之前将 目标文件给替换了,所以导致打包生成的 target 目录下的 xxx.jar 和 安装到本地仓库的 xxx.jar 不一致。

03 小结

本文记录了日常的一个问题排查过程,包括两个小点,一个是如何去 debug maven 的插件,另外一个是简单了解下 maven 打包的生命周期。

来源:https://www./content-4-348301.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多