阅读本博客之前, 请务必检查springcloud各组件的版本是否按照官网严格要求对应一致
SpringBoot提示错误如下:

注意看标注部分, 很明显是因为maven依赖中有两个servlet-api包, 而我们引入了其中一个没有getVirtualServerName()方法的包, 导致了报错
我们也可以用ctrl + N搜索类, 会发现有两个ServletContext类,其中一个没有该方法
但是我怎么知道这两个jar是哪来的呢? 右键子工程(子工程中可以看到父工程的依赖, 反之不行)的pom.xml文件, 选择图|显示依赖项

将生成的依赖图法放大, 使用ctrl + F, 就可以看到所有的依赖项了,(点击线条会高亮显示)

可以发现一切javax.开头的包都来自于Eureka, 所以直接在eureka的依赖中移除servlet即可
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>3.0.4</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
</exclusions>
</dependency>然后就可以正常运行了(不容易啊, 放寒假前的bug了呜呜呜):

解决依赖版本冲突问题还有一种方法, 因为maven处理冲突的原则是子依赖覆盖父依赖, 下面覆盖上面
所以有时候直接在已有依赖的下方添加新的版本的依赖(会覆盖上面的)即可
版权声明:本文为xiaoyouyouaaa原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。