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