----------------------------------------------------------------------------------以下是正文-----------------------------------------------------------------------------------
一、项目大概结构
iot(有pom.xml文件) --------------------------------------------------------------------------------------主项目
iot-providers(有pom.xml文件)-------------------------------------------------------------------主项目下的一个子模块
… …
… …
二、问题背景
作为一个刚刚起步的小白,很多东西都还处在探索的过程中。
最近,我正在研究公司项目的源码,并提取了两个表进行基本功能模仿实现。这两天遇到了一个问题,就是我模仿源码在一个子模块iot-providers下的一个类里写了@EnableDiscoveryClient注解,但是却爆红了,如下图,
我知道,这是因为我在主项目iot或者该子模块iot-providers的pom.xml里没有导入对应的依赖,所以程序找不到该注解@EnableDiscoveryClient。当我去对应的pom.xml里找这个依赖的时候,发现并没有那么简单。
如果大伙去了解了Maven的相关知识,就会发现Maven里有聚合和继承的概念,这是为了主项目和子模块、子模块和另一子模块彼此导入的依赖可以进行选择性继承和复用,这样可以简化重复的依赖导入,不至于变得臃肿。
精练是精练了,但相对的结构就复杂了,所以想直接找到对应的依赖有时候是不可能的。这个时候我们就可以借助Maven的一个功能,如下图,
三、详细操作步骤
刚开始的情况是,我们在如下图位置看到了爆红,
这个时候,可以回到公司项目源码上查看该类包属于哪个依赖,如下图,(另一个方法是,可以问度娘,@EnableDiscoveryClient属于哪个依赖)
知道依赖名【Maven: org.springframework.cloud:spring-cloud-commons:2.2.5.RELEASE】就好办了,我们点开Maven的“显示 依赖…”功能,如下图,
然后按Ctrl+F,接着输入刚才的依赖名spring-cloud-commons便可以对该依赖树图里的依赖进行搜索,如下图,
由于公司项目是由很多个子模块构成的,也就是有很多个pom.xml,所以我们要一个一个去选择模块,然后在模块依赖树图里进行搜索,如下图,
经过一个一个搜索排查,最终确定依赖spring-cloud-commons位于另一个依赖spring-cloud-starter-alibaba-nacos-discovery下,如下图,
所以我们只需将依赖spring-cloud-starter-alibaba-nacos-discovery的导入定义到对应子模块iot-providers的pom.xml下,也就把依赖spring-cloud-commons一并导进去了,如下图,
点击Maven重新加载按钮,此时爆红已经消失,如下图,
温馨提醒:看网友有在网上提了另一个问题,大概的意思就是在依赖树图上Ctrl+F搜索,明明有这依赖,却定位不到,这边我试了一下,给出两个建议:1、反复进行Ctrl+F搜索,它最终是会准确定位到你那个搜索的依赖上的,那个依赖会停在正中央,且用八个点标注着,如下图;2、在输入完依赖名后,如若下拉框有对应的,用鼠标点击进行搜索,不要按回车键进行搜索,如下图,
本文到此就结束了,希望可以帮到你们!!!