真的吐血了快!又是maven问题,导致项目打包报错。
maven问题梅开二度!!!我醉了呀!!!
问题描述
在idea中使用Terminal终端,对项目进行打包,然后报错。
报错信息:
[ERROR] Failed to execute goal on project msc-facade-base: Could not resolve dependencies for project com.shenzhenbsoft:msc-facade-base:jar:1.0: The following artifacts could not be
resolved: com.sun:tools:jar:1.8, com.sun:jconsole:jar:1.8: Could not find artifact com.sun:tools:jar:1.8 at specified path E:\localDepository\repo\com\alibaba\druid\1.1.21/lib/openjd
k-1.8-tools.jar -> [Help 1]
然而,使用idea自带的maven插件,同样的命令却成功了。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1ec70bd35fe94de5a79f8d2ff26e81db.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
验证猜想
根据上面的结果来看,我首先怀疑的就是maven版本问题导致的。因为我本地的maven环境,前段时间刚更新过,由原来的的3.5.0换成了现在的3.8.2。
为了验证这个猜想,对环境进行了查看。
1、IDEA自带的maven插件的版本信息
打开settings找到maven的配置信息,可以看到我这里默认的版本是3.6.1
![在这里插入图片描述](https://img-blog.csdnimg.cn/a8b660a1d42845cda92975229f08a293.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
2、IDEA中Terminal终端中的maven版本
打开Terminal界面,输入mvn -v,可以看到当前的mvn版本是3.8.2
![在这里插入图片描述](https://img-blog.csdnimg.cn/1ddfd18f47ca4cacad9e19daf6f08644.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
3、分别使用上面的2种方式,对项目打包
(1)使用maven插件打包,显示结果为success
![在这里插入图片描述](https://img-blog.csdnimg.cn/dd68b57e114f4880a8205999c67fcc4d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
(2)使用Terminal终端打包,报错
![在这里插入图片描述](https://img-blog.csdnimg.cn/9ed2ecae66b744069e05c994bdebc23b.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
4、更换Terminal中maven的版本为3.5.0,然后进行打包
(1)设置maven版本
IDEA中的Terminal的环境,实际就是本地的cmd.exe程序,IDEA会默认加载系统的环境变量。但是这里会有一个缓存问题,当你的系统环境变量发生了改变,而你的IDEA窗口没有重启,那么在Terminal中使用系统环境变量时,就还是以前的设置,需要重启IDEA才能刷新到新的设置。
这个地方我们修改的是maven的配置,所以我直接对Path进行修改。
![在这里插入图片描述](https://img-blog.csdnimg.cn/fd3fc533de6a49f8bfb48f9a9d74a9f7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
(2)Terminal中校验maven版本
在Terminal中输入mvn -v,查看maven版本是否更改成功。
注意:需要关掉刚才的Terminal窗口,重新打开
![在这里插入图片描述](https://img-blog.csdnimg.cn/22de7c180a094461b1deddb79eee2683.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
(3)Terminal中打包项目
在Terminal中输入mvn package,查看项目是否打包成功。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d297ecb6f686457f92d9558a52ac2e4e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
到这里为止,可以看出本次的报错确实与maven版本有关系,我没有去细查,可以确定的是3.8.2版本会报错,而3.6.1及以下的版本不会报错。
原因分析
仔细查看前面maven打包报的错,可以看出错误信息是说:在指定路径下找不到jar包文件。
The following artifacts could not be resolved:com.sun:tools:jar:1.8, com.sun:jconsole:jar:1.8:
Could not find artifact com.sun:tools:jar:1.8 at specified path E:\localDepository\repo\com\alibaba\druid\1.1.21/lib/openjdk-1.8-tools.jar -> [Help 1]
然后我就去这个路径下面找这个文件,报错的这里是一个druid的jar,在这个版本下肯定不可能有/lib/XXX.jar,于是我查看了它的pom文件。
![在这里插入图片描述](https://img-blog.csdnimg.cn/f3415187895a4009bde7340c73a961d0.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAeWluZ3pfUUFR,size_20,color_FFFFFF,t_70,g_se,x_16)
结论
发现报错的2个jar包都涉及到去读系统变量,由此可以基本得出一个结论,maven3.8.2版本可能会导致系统变量错误读取,从而报错:XXX.jar在指定路径下找不到该文件。
而我们为了日常正常使用呢,有2种办法:
(1)更换maven版本,不要使用3.8.2高版本,使用3.6.1及以下的版本;
(2)在确实需要使用高版本maven时,对于涉及到需要读取System标签的依赖,对报错的jar包进行排除;
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
<exclusions>
<exclusion>
<groupId>com.sun</groupId>
<artifactId>tools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun</groupId>
<artifactId>jconsole</artifactId>
</exclusion>
</exclusions>
</dependency>
到此结束,如有错误的地方,请大家不吝赐教!