maven加载jar依赖的时候,不要做任何影响网络连接状态的事

说起来都是泪,一个爆红让我找了4个小时。

错误的思考过程我选择遗忘,直接说结论吧。

兜兜转转之后,终于,意识到之前自己刚刚声明了依赖之后,就手贱点了一下vpn,导致正在加载jar的maven,数据连接状态发生了“变化”。

(思考:vpn启动后,网络发生了怎样的变化?)

有可能是vpn开启的瞬间的断网,让一些jar包下载失败,但maven仍然获取到了有相应jar名的空的文件,即只下载了一部分同名的缓存文件。

所以,在声明注释时,因为需要import相关依赖,但因为下载的文件并不能被称为jar包,所以没有被加载到jvm中,理所当然地爆红了。

(思考:jvm中类加载机制,寻找依赖的过程)

解决办法也很简单,在maven仓库中把刚导入的依赖完全删除

(或者使用一个能删除未完全下载jar文件的小工具:https://blog.csdn.net/weixin_42266508/article/details/81436879)

重新创建项目后,慢慢等待,让maven再一次导入完整的jar就可以了。

 

为什么我这里要说“重新创建项目”呢?

因为错误的思路,我在途中把原项目从idea中移除掉了。

然而移除掉之后,再次创建项目时,我又遇到了另外两个坑:

1. 是即使从存放项目的文件中删除了原项目,再次创建时,idea仍然提醒我该项目已存在,即我又创建了一个重名的项目。

2. 是创建后的pom.xml文件路径错误,无法创建maven项目,这个确实给我整懵了。

 

第一个很简单,表面删除了文件中的项目后,物理上的它仍然存在于磁盘中,需要从回收站中将它彻底清除掉才行。

想来也是idea对windows文件回收和恢复机制的被刺吧。当然更可能的是一种我尚未了解的maven使用的文件寻址机制。

有了第一个问题的思路,第二个问题也慢慢明了,pom文件路径错误,提示还特别用心给了错误文件的路径。

那就好说了,一路摸过去,我发现在C:\Users\Administrator\AppData\Local\Temp目录下(用户数据缓存区),有多个xxxx1xxxx,xxxxx2xxxxx格式完全一致的文件。

点进去看,发现缓存的正是之前重复创建后重名报错的项目名文件!而里面的pom文件,正是报错的源头!

怪不得,我第一次遇到的错误是重复文件,第二次才遇到pom报错。

我猜测,idea或者是maven中有这样一种机制:

即,创建的项目,其pom文件会在c盘中的某个位置上被记录下来(或者放到缓存中),当再次创建时,即使在回收站中将同名的原项目清理干净,但因为留下了pom文件的记录,加上每次重复创建后,记录所用的文件名会在中间标出次数xxxxNxxxxx,即诞生了不同的pom记录的文件(地址),所以再次创建同名文件时,会出现pom文件路径错误的异常。

 

总结一下:

1.maven加载jar时不要改变网络状态,会导致jar包文件缺失。

2.删除maven项目时,要连同回收站中的项目一起删除,才能不被maven特殊的文件寻址方式重新找到。

3.由此引发了另一个问题,即没有彻底删除的项目,被maven重新找到,并报了错误后,会生成另一个记录pom路径的文件,并且,每重复创建同名项目一次,就会多出来一个。

 

通过收拾这几个错误,自己查看日志和纠错的能力得到了显著提升,虽然踩了一些坑,但也有了更多调整idea和maven的经验。

希望后面自己每年的憨批操作能越来越少吧。

 

posted @ 2020-05-08 06:12  早睡健康长寿  阅读(511)  评论(0)    收藏  举报