为什么Jersey 2.22有" javax.servlet-api-3.0.1"包括在泽西岛捆绑?

时间:2015-10-20 17:59:31

标签: java servlets jersey

Servlet规范3.0:

  

Web应用程序类加载器   容器用于在WAR中加载servlet的类加载器必须允许   开发人员在WAR中加载库JAR中包含的任何资源   使用getResource的普通Java SE语义。如Java EE许可证中所述   协议,不属于Java EE产品的servlet容器不应该允许   用于覆盖Java SE平台类的应用程序,例如java。*和   javax。*名称空间,Java SE不允许修改。容器   不应该允许应用程序覆盖或访问容器的实现   类

所以考虑到这一点,我不明白为什么Jersey 2.22有泽西2.22包中包含的javax.servlet-api-3.0.1 jar。它有什么理性的解释吗?默认情况下,我相信像Glassfish,Tomcat等容器在lib目录中有自己的servlet-api.jar。

1 个答案:

答案 0 :(得分:1)

如果你检查这个link,你会发现它是提供的依赖,这意味着编译应用程序所需的依赖 ,但是在使用库时默认提供

Maven documentation解释了provided依赖范围的工作原理:

  

这很像compile [依赖范围],但表示你   期望JDK或容器在运行时提供依赖性。   例如,在为Java Enterprise构建Web应用程序时   版本,您将设置与Servlet API和相关的依赖   提供范围的Java EE API,因为Web容器提供了   那些课程。此范围仅适用于编译和   测试类路径,并且不是传递的。

Jersey 2.22.x bundle包含JAX-RS 2.0 API jar,所有核心Jersey模块jar以及所有必需的第三方依赖项。