使用SpringBoot開發項目,要集成undertow,pom依賴沒有問題如下所示:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--springboot web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!–排除tomcat容器,使用undertow–>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>-->
</dependency>
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
啟動項目后一直報錯java.lang.ClassNotFoundException: javax.servlet.DispatcherType
從字面是理解就是類找不到嘛,libraries中相應的依賴查看,確實沒有,網上搜了一下,大家都是說類找不到是缺少依賴,嘗試了添加和undertow相關的所有依賴。
可是項目依然報錯。后來看到一篇博文下的評論說,可能是依賴沖突導致的。我排查了一下自己的依賴,發現有沖突,可是不是在這個地方有沖突。然后就想,會不會是
SpringBoot的版本和undertow的版本有沖突呢?然后嘗試着修改了一下springBoot的版本。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
從2.1.3改成2.0.7啟動后果然不再報ClassNotFoundException的錯,但是,因為項目中使用了kafka,而且還是公司自己對底層進行二次封裝的kafka,
然后再次報錯
Error creating bean with name 'kafkaListenerContainerFactoryConfigurer' XXXXXXX
,看到這個差點瘋了。
認真看了一下項目的pom文件,然后就思考,這會不會又是版本號穩定導致的呢,然后琢磨 spring-boot-starter-parent這個玩意兒,好像是會對項目中
依賴的版本號進行管理的,那不如把kafka的版本去掉試試,果然掉版本號后,項目啟動成功。
總結:類找不到的問題,要么就是沒有添加相關的依賴,要么就是添加的依賴和springBoot的版本有沖突。