【学习笔记——SpringBoot 0104】网络原因使得Maven依赖下载不完全导致pom.xml内容未报错但在资源管理器中爆红/解决需要删除lastUpdated文件并更新项目

       首先,我先展示下之前准备写的Thymeleaf系列,在此内容中,由于在pom.xml文件中加入了Thymeleaf依赖配置后,导致pom.xml文件在资源管理器中爆红。摸索了很久之后,发现原因是Thymeleaf依赖并没有下载完全,但是在pom.xml文件内容中没有报错,却在Eclipse的资源管理器中报错了,因此,对我造成了迷惑,导致我迟迟没有发现问题的原因。在不断的删除未完全下载的lastUpdate并Force Update之后,才将Thymeleaf依赖下载完全,解决了问题。当然,导致这个问题的原因跟我们在第一篇中讲得创建SpringBoot项目时是一样的,是因为我使用了手机共享出来的受限网络,因而下载资源要么很慢,要么经常下载失败。

 

一、配置Thymeleaf后pom文件爆红

       1)添加Thymeleaf后pom文件爆红

       如下图所示,没有配置Thymeleaf时,左侧项目资源管理器中的pom文件及pom文件内容都没有报错。

       但配置了Thymeleaf后,左侧项目资源管理器中的pom文件就爆红了(后来知道原因是Thymeleaf依赖没有下载完全)。

       2)点击Update Project没有用

       准备点击Update Project。

       勾选强制更新。

       如下图所示,开始更新maven。

       但由于网络原因(由于当前情况用的是手机开的热点,手机网络可能受限较多,因此不太好下载相关依赖),下载不动Thymeleaf的依赖,最后会导致下载失败,因而pom文件依然是爆红的。

       3)在C:\Users\yang\.m2中搜索lastupdate

       在Eclipse的默认Maven本地库C:\Users\yang\.m2中搜索lastupdate,并将搜索出的所有名称中包含lastUpdated的文件全选并删除。因为这些都是因为网络原因没有下载完全的Maven依赖文件,所以影响了在Eclipse中对Maven的更新。

       4)继续Update Project

       在删除掉本地库中的所有lastUpdated文件之后,重新在Eclipse中点击Maven>Update Project,继续更新Maven(如果有较好的网络环境,将会很快下载完剩余的Maven依赖文件)。如果由于网络状况不好,发现更新结束后,pom.xml仍旧报错,且本地Maven库中仍有未下载完全的lastUpdated文件,则继续删除掉这些未下载完全的文件,并继续在Eclipse中对当前项目进行Update Project,直到项目不报错为止。

 

===============================================================================================

       以下内容为本篇博客正文。

       前面提到,在给pom.xml文件中配置Thymeleaf时,由于Thymeleaf依赖实际没有下载完全,但在pom.xml中却没有报错,而Eclipse项目资源管理器中的pom.xml确实爆红的,导致找到问题的根源花了很长时间。另外,一开始以为这个问题是对于配置Thymeleaf时所特有的,所以准备在Thymeleaf系列中分享此问题,但后来发现,这时对于所有Maven依赖都存在的现象,即:有可能依赖没有完全下载,但pom.xml文件内容不报错,却在项目资源管理器中爆红,因此需要删除Maven本地库中的所有未完全下载的lastUpadated文件。因此,现在我们准备在SpringBoot系列中将这个问题分享出来。

 

一、受限网络下的Maven依赖下载

       因为后来使用了非手机网络(不受限的网络)将所有Maven依赖都成功下载了,所以依赖没有完全下载的问题就不好演示了。所以,我趁着在上一篇中单独安装Maven的机会,由于可以重新设定一个本地库的位置,所以可以重新下载所有的Maven,借此过程,可以给大家演示下个别Maven没有完全下载的情况和解决的过程。

       1)Maven下载不完全,项目报错

       由于上一篇中,我们重新安装了一个独立的Maven,并配置了新的本地库repository,因此,之前Eclipse中所有的Maven项目都报错了,因为在新的本地库中,还没有下载好项目中需要的所有Maven依赖。

       我们仔细阅读下上图中pom.xml报错的地方,我给大家翻译了一下:

       项目生成错误:对于com.xdyangf:springbootinit:0.0.1-SNAPSHOT存在不可解析的父项目对象模型POM:未能将已缓存在本地存储库中的org.springframework.boot:spring-boot-starter-parent:pom:2.3.2.RELEASE从https://repo.maven.apache.org/maven2传输,在中心(中心可能指的是maven源)的更新间隔时间超出或强制执行更新之前,不会重新尝试解析。原始错误:无法将项目Original error: Could not transfer artifact org.springframework.boot:spring-boot-starter-parent:pom:2.3.2.RELEASE从/到中心(https://repo.maven.apache.org/maven2)传输:连接超时,并且'parent.relativePath'指向没有本地POM。

       这段话的意思就是说,org.springframework.boot:spring-boot-starter-parent:pom:2.3.2.RELEASE已经缓存了,但是没有下载成功,在下载超时或者是用户没有对其进行强制更新之前,项目自己不会再进行对Maven的更新了。

       所以,意思需要我们自己继续对项目进行Maven的更新,而且需要强制更新。那么,既然要更新,就得想前面说的一样,我们需要去新的Maven本地库中,将没有下载完全的Maven缓存lastUpdated删除掉,再来进行项目的强制更新。

       另外,我们也可以打开IntelliJ IDEA,发现之前的springbootinit项目也报错了,也是因为Maven依赖没下载好的原因。

       2)删除所有的lastUpdated文件

       如下图所示,我们在D:\Program Files\repository路径中搜索lastupdate,然后将所有文件名中含有lastUpdated的文件都删除掉。

       如下图所示,全部都要删除。

       3)开始强制更新项目

       如下图所示,删除掉所有未完全下载的Maven缓存lastUpdated文件之后,就可以开始强制更新Maven项目。

       勾选Force Update of Snapshots/Releases,并点击确定。

       如下图所示,Maven依赖已经开始继续下载。如果网络较好,会下载的比较快;如果网络较差,则会下载很慢,或是仍然下载失败,导致出现很多未完全下载的lastUpdated缓存文件,因此需要继续循环前面的步骤,删除未完全下载的lastUpdated文件,并进行Maven的强制更新。

       当然,我们也可以从IntelliJ IDEA中对项目进行Maven的reimport。不过,最好不要打开Eclipse和IntelliJ IDEA并对Maven项目同时进行更新,可能会导致下载错乱。

       4)Maven正常更新结束

       如下图所示,当springbootinit项目中所需的所有Maven依赖都正常下载之后,项目将不再报错。Eclipse资源管理器中的其他SpringBoot依然有爆红是因为,还没有对这些项目进行Maven更新,更新之后,也将恢复正常。

       切换到IntelliJ IDEA,发现其中的springbootinit项目也恢复正常了,因为两个IDE设置的Maven和本地库都是一样的,所以通过其中一个开发软件将项目所需的Maven依赖下载好,另外一个中也将能正常开发项目。

 

二、总结

       此篇,我们就说了一件事,在Maven依赖没有正常完整下载导致项目报错的时候,只需要去Maven的本地库中删掉所有的lastUpdated文件,再对项目进行Maven的强制更新即可。

posted @ 2020-08-05 21:06  XD_Yangf  阅读(168)  评论(0编辑  收藏  举报