关于jetty-server-xxx.jar问一个小问题

我在jfinal文档看到这句:注意:在使用tomcat开发或部署项目时,需要删除jetty-server-xxx.jar 文件,以免造成冲突

想问一下,如果部署在tomcat上没有删会有什么后果。。严重吗,会不会影响项目在线上运行

评论区

JFinal

2017-11-24 11:59

jetty 也是 servlet/jsp 容器,所以里头会有支持servlet、jstl、jsp 的这些 jar 包存在,而 tomcat 也是 servlet/jsp 容器,也包含这些 jar 包

而 jetty tomcat 包含的这些 jar 包很可能存在冲突,出错的可能性很大

解决办法很简单:
1:如果是 maven 项目,只需要在打包前将 pom.xml 中对 jetty-server 的依赖的 scope 改成 provided
2:如果不是 maven 项目,只需要删掉 lib 下的 jetty-server 这一个 jar 包即可

Dreamlu

2017-11-24 16:37

严重,可能启动都会报错~

嗷嗷嗷

2017-11-27 17:10

@JFinal 我删除了jetty-server-xxx.jar之后启动tomcat报错了,报错如下
严重: Exception starting filter jfinal
java.lang.NoClassDefFoundError: HttpServletRequest

JFinal

2017-11-27 18:35

@嗷嗷嗷 多个 servlet 版本的 jar 包冲突了,如果你是 maven 项目打包出来的,那很可能是 jetty 的关联 jar 包没删干净

打包之前将对 jetty server 的依赖的 scope 改 provided 解决

也就是说maven 项目下, jetty-server 这个依赖会传递依赖很多其它的 jar 包,打 war 包时会全打进去

嗷嗷嗷

2017-11-28 09:03

@JFinal 不是maven,我是直接删了项目lib下的jar包,还要改什么吗?

JFinal

2017-11-28 10:45

不是maven ,只要删掉 jetty-server-8.1.8.jar 包就可以了。 但是你如果自己添加过有关 jsp、jstl 相关 jar 包,也要删掉,原因与前面谈的本质上一样

在 jfinal 的角度,非 maven 项目,只提供过 jetty-server-8.1.8.jar 这个 jar 包,但仍然无法阻止你自己额外添加 jsp、jstl 相关的 jar 包,这点就是在删了 jetty-server jar 包以后,解决问题的关键