在学习Eureka的时候启动报了一个错误(因为粗心大意),CausedBy截图如下:
问题定位过程
可以看出主要原因是抛出了
ArrayStoreException
,遂用IDEA的异常断点进行debug,步骤如下:在main方法打断点,然后在断点标记上右键点击,在弹出的对话框中点击More,又出来一个对话框
在第一步最后弹出的对话框内,点击左上角加号(➕),然后选择第三个,在弹出的搜索框中填写ArrayStoreException,即抛出异常的类
最后点击右下角Done,对项目进行debug
根据结果是进行下面操作的时候抛出的异常,根据截图找到了var3这个变量。
根据var3跟踪到了一个注解,然后没有了思路:
再然后,定位CauseBy中的
TypeNotPresentExceptionProxy
,找到其构造函数进行debug。发现是包装了一个ClassNotFound的异常:
java.lang.ClassNotFoundException: org.springframework.cloud.context.scope.refresh.RefreshScope
全局搜索了一下确实没找到
{%asset_img image-20200524231205101.png %}RefreshScope
这个类,看其包路径发现了一些端倪,发现项目中缺少context相关包找到这个依赖,查看父依赖(点击左侧带字母o的图标即可跳转)
{%asset_img image-20200524232336270.png %}通过查看父依赖pom文件的结构看到有一个跟我写的差不多的依赖,只是多了个starter。脑海里顿悟,我应该引入带starter的依赖(starter涉及autoconfig,而RefreshScope又和autoconfig有关)。
{%asset_img image-20200524232713811.png %}
问题解决
随后对比erueka的pom引入,发现erueka的路径少写了个starter。补上,重新引包问题解决。
正确pom如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
引入正确pom依赖后,出现了RefreshScope
所在的包org.springframework.cloud.context
重启ok,问题解决