记java编译工具从mvn迁移至mvnd的一个小坑

小坑来由

由于公司项目日益壮大,项目的编译时间也水涨船高,因此本人遍寻伟大的互联网,发现Apache官方对于maven项目编译研发了一个新工具暂且称它mvnd,使用过的前辈宣称其编译效率提升了200%,看到这个信息我顿时欣喜若狂,烦人的长时间编译终于有救了。
接下来根据官方文档的安装说明 ,迅速在本地搭建起了mvnd的运行环境,怀着忐忑的心情去编译了项目(本地环境),具体效果如下:
使用mvnd编译整个项目的耗时
这里是使用mvnd编译整个项目的耗时
使用mvn编译整个项目的耗时
这里是使用mvnd编译整个项目的耗时
对比下来效果显著,基本上符合传言200%效率的提升。事不宜迟,立马干到预发布环境进行服务测试,这时候坏消息来了,正当我启动一个又一个springboot项目都很正常的时候,启动dubbo容器项目报错了,如图所示:启动报错

问题排查

看到这个我愉悦的心情戛然而止,找不到类?这是什么神仙问题?难道mvnd没把这个类编译进去么?怀着这样的疑问,根据提示的类路径找到lib目录下(这个项目是在编译时把需要的jar包拷贝到指定目录,这里是lib),发现对应类路径的jar包他是存在的,顿时满脸问号。思前想后没有啥好办法了,于是直接对比mvn和mvnd编译后的文件,这时候有了重大发现,如图:
文件对比
到这里报错原因就已经明了了,通过mvnd编译后的主程序jar包中manifest.mf文件缺少了类索引参数Class-Path。行原因是知道了,但是这咋解决呢?直接的思路就是去找为啥编译的时候会没有在manifest.mf文件添加这个参数,查阅资料发现是否添加是由maven编译插件配置中addClasspath参数控制的
编译配置
参数也设为true了为啥没生效呢?苦思冥想也没有想到什么方法去确定这个参数为什么会失效(为此我还跑到阿帕奇官方github库提了issue),正当我一筹莫展的时候,我发现这个编译插件没有指定版本!!

问题解决

随后我将相关编译配置取出来, 搭建了一个小项目进行指定最新插件版本和原配置的一个mvnd编译比较,别问为啥搭建一个小项目,3m和3s的编译你选哪个。结果没有令我失望,在没有指定版本的情况下默认使用2.4版本进行编译,成功后缺少Class-Path参数,指定最新版本3.2.2编译后参数正常添加,项目正常启动。绕了一大圈一行配置代码解决了这个问题。
版本指定解决问题

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值