为什么泽西 2.22 "javax.servlet-api-3.0.1"包含在泽西bundle中?



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以及所有必需的第三方依赖项。

最新更新