springCloud对于springBoot有版本要求,具体版本要求可以在官网查看
这里用的是springCloud Hoxton.SR8, 对应的springboot版本是2.3.5.RELEASE
不过直接用springbootinitializer创建就好了,选择版本的时候会自动匹配的
添加好依赖,注意dependencies和dependencyManagement的区别
这里我遇到了个bug,是版本问题,同时找到了两个版本的xxx.class,并且使用了其中一个,结果并不行。
是因为继承问题,就如maven官网所说的:
一个项目引入了
dep1和dep2,dep1又依赖于dep2, 我们给的dep2版本和dep1所需要的版本不符合,dep1当然只能选择我们给的版本,然后就会出错
在想想,看报错信息是说servlet-api-2.5.jar里面有个
javax.servlet.ServletContext.class,
tomcat-embed-core-9.0.33.jar\里面也有javax.servlet.ServletContext.class,这两个冲突了。
根据maven的tree来查看,发现tomcat-embed-core-9.0.33.jar是optional的,
也就是不调用他的时候不会被加载。
根据maven mediation规则,会优先选用层级靠前的(依赖层级),如果层级一样,就会选用首先声明的。
但是这里由于是optional,所以他要被优先声明才会被调用,否则不会被调用。
servlet-api-2.5.jar是在
spring-cloud-starter-netflix-eureka-server:jar,
tomcat-embed-core-9.0.33.jar是在spring-boot-starter-web:jar,
所以我把spring-boot-starter-web:jar优先声明,
就会调用正确的javax.servlet.ServletContext.class。
当然也可以在spring-cloud-starter-netflix-eureka-server:jar
里exclude掉servlet-api,也不会冲突