Servlet Spec 3.0:
Web应用程序类装入器容器用来在WAR中加载servlet的类装入器必须允许开发人员在WAR中加载库jar中包含的任何资源使用getResource的普通Java SE语义。如Java EE许可中所述协议,不属于Java EE产品一部分的servlet容器不应该被允许应用程序重写Java SE平台类,例如Java中的类。*和javax。*命名空间,Java SE不允许修改。容器是否应该不允许应用程序覆盖或访问容器的实现类
因此,我不明白为什么Jersey 2.22在Jersey 2.22捆绑包中包含javax.servlet-api-3.0.1 jar。有什么合理的解释吗?默认情况下,我相信像Glassfish、Tomcat等容器在lib目录下有它们自己的servlet-api.jar。
如果你检查了这个链接,你会发现它是提供的依赖项,这意味着该依赖项是编译应用程序所必需的,但在使用库时应该默认提供。
Maven文档解释了provided
依赖范围是如何工作的:
这很像
compile
[dependency scope],但是指示您期望JDK或容器在运行时提供依赖项。例如,在为Java企业构建web应用程序时版本时,您将设置Servlet API和相关的依赖项Java EE api的范围提供是因为web容器提供的这些类。此作用域仅在编译和测试类路径,并且不可传递。
The Jersey。x包包含JAX-RS 2.0 API jar、所有核心Jersey模块jar以及所有必需的第三方依赖项。