问题:Cannot resolve com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:1.4.1
意思就是不能用maven加载到这个1.4.1版本的 artifactId 为 spring-cloud-starter-alibaba-nacos-discovery的jar,说白了就是maven库里面没有找到这个artifactId的jar
问题产生的背景:本人最近在学spring cloud alibaba,然后一个教学视频里老师引用的spring boot 为2.1.3.RELEASE版本,spring cloud 为Greenwich.RELEASE版本,spring cloud alibaba为2.1.2.RELEASE。然后讲到nacos服务注册发现章节,需要在项目里导入nacos的jar包,视频中的maven写法如下:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
我就照着写,发现报错Cannot resolve com.alibaba.cloud:spring-cloud-starter-alibaba-nacos-discovery:unKnow
我查了网上关于unKnow的错误,说是maven中没有明写版本号,于是我就写了个版本号1.4.1,结果的maven如下:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>1.4.1</version> </dependency>
结果就报上面问题的那个错误。然后各种百度这个错误,很多回答我都试了,都不行。后来怀疑是不是maven的配置文件中引入的阿里云maven仓库地址里面根本就不包含nacos-discovery这个jar包。我的maven是3.6.版本,在maven文件夹下有个conf文件夹,下面有个settings.xml文件。在这个文件下有个mirrors节点,然后在里面就可以配置阿里云的maven仓库地址了。下图是我的maven的settings.xml文件的路径:
下图是我的settings.xml配置文件中关于maven仓库地址的配置
由于我怀疑阿里云的maven仓库里根本就不包含nacos的jar,所以我网上搜了一些其他的maven仓库地址,基本上把网上能搜到的地址都试了一遍,仍然报最开始的那个问题错误。此时,我有点抓狂了!!!到底是什么问题呢,既然别人能把这个nacos的jar导下来,那么maven仓库肯定有这个啊。于是我怀疑是不是我的nacos版本错误了。于是我去nacos的官网查询现有nacos有哪些版本。
这里我要说一下问什么我开始一直用1.4.1作为版本呢,那是因为我在官网上看了一个nacos的版本说明,说明截图如下:
注意图中红色框内容,说如果spring cloud alibaba的版本是2.2.5或者2.1.4或者2.0.4,那么nacos的版本为1.4.1
就是这个截图内容坑了我一晚上,我一直以为maven仓库中有1.4.1版本的spring-cloud-starter-alibaba-nacos-discovery
其实maven仓库里根本就没有这个1.4.1的spring-cloud-starter-alibaba-nacos-discovery,后来我理解这里的版本关系其实应该说的是nacos的服务端的版本和spring cloud alibaba的版本关系,maven仓库中的spring-cloud-starter-alibaba-nacos-discovery的版本关系和这个图里的版本根本就没半毛钱关系,泪奔啊,官网也是个坑啊,写的糊里糊涂的,把我这种刚开始学的人整的蒙蒙的。。。。
好了,接着上面的思路。我想看看阿里云maven仓库里到底有没有1.4.1的spring-cloud-starter-alibaba-nacos-discovery,于是找到了阿里云的maven仓库主页https://maven.aliyun.com/mvn/guide
图里面明显看到,阿里云maven仓库的地址发生变化,所以我把maven的settings.xml种的配置修改成最新的阿里云仓库地址了。然后在阿里云maven仓库主页面的左边列表种选择“文件搜索”功能,进去会有2种搜索模式,一种是关键字、一种是直接输入
groupId、artifactId来搜索,如下图:
通过搜索,发现spring-cloud-starter-alibaba-nacos-discovery根本就没有1.4.1这个版本。。。汗。。。。
nacos的0.X的版本是对应的spring cloud的版本,不是毕业版本,它的maven引入写法都不一样,写法如下(用0.1.2.RELEASE版本做例子):
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>0.1.2.RELEASE</version> </dependency>
nacos的毕业版本是从1.5开始的。nacos的毕业版本分为1.5.X、2.0.X、2.1.X版本,分别对应了spring boot的1.5.X、2.0.X、2.1.X版本。nacos毕业版本的maven写法如下(以2.1.4.RELEASE版本做例子):
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.1.4.RELEASE</version> </dependency>
nacos的毕业版本的对应关系其实在nacos的官网上有说明,如下图:
从上面这个问题的解决过程,自己学到了如何直接去阿里云maven仓库官网里去找对应的依赖,如果以后有依赖忘记如何引入,可以直接去maven仓库官网看每个jar的依赖写法。大家如果以后有引入依赖失败的情况,也可以参考这些步骤去解决哦。
而且建议大家赶紧把阿里云maven仓库的地址更新成最新的吧,网上都是一大堆你抄我我抄你的答案,给的maven配置文件中的阿里云的maven仓库地址都是老地址,而且也没有明确说明central仓和public的区别,看看阿里云maven仓库的官网就能发现,public仓是central仓和jcenter仓的聚合仓,那我们在平时用时肯定用public仓要保险一点咯。