当前位置: 首页 > 知识库问答 >
问题:

servlet和JAX-RS的依赖来自哪里?

关玄裳
2023-03-14

如果我在我的应用程序中包含以下J2EE依赖项,我就可以访问servlet和JAX-RS类和接口:

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>

但是它们是从哪里来的呢?在Maven Central上,我看到javax: javaee-api: 7.0作为依赖项javax: javaee-web-api: 7.0,这又作为依赖项javax.servlet:javax.servlet-api: 3.1.0javax.ws.rs:javax.ws.rs-api: 2.0,所以从表面上看,这就是答案。

但是所有这些依赖项都被标记为可选,这意味着作为传递依赖项,除非我明确包含它们,否则它们不会在我的项目中显示。但我的程序编译时只需依赖javax:javaee-api:7.0。为什么?

这是我的依赖树;我不知道他们从哪里进来:

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ temp-server ---
[INFO] com.example:test-server:war:1.0.0-SNAPSHOT
[INFO] +- com.google.code.findbugs:jsr305:jar:3.0.1:provided
[INFO] \- javax:javaee-api:jar:7.0:compile
[INFO]    \- com.sun.mail:javax.mail:jar:1.5.0:compile
[INFO]       \- javax.activation:activation:jar:1.1:compile

(这些都是基本的东西;我不知道我为什么感到困惑。我一定错过了一些明显的东西。)

共有2个答案

刘京
2023-03-14

在这里,您需要理解< code >的含义

现在回答您的问题,如果您考虑任何运行时环境容器,例如JBOSSWA等,它们都与这些jar捆绑在一起。因此,在编译类时,它将使用作为javaee-api的传递依赖项的jar,但在运行时,它将使用与容器捆绑在一起的jar。因此,您不会收到任何错误。

严欣怡
2023-03-14

由于JAX-RS 2.0JavaEE 7的一部分,定义其API的类直接包含在工件javax: javaee-api: 7.0中,因此只要您只使用标准类就足以编译您的程序。

 类似资料:
  • JAX-RS是否可以只使用带有注释的Servlet3.0(特别是Tomcat7)来实现,而不必实现另一个Servlet容器? 如果不是,请解释为什么下面这本书中的引用是不正确的,或者是我对它的解释是错误的。 因为此示例部署在Java EE应用程序服务器或独立的Servlet3.x容器中,所以我们只需要一个空的web.xml文件。服务器将检测到某个应用程序类在您的WAR中,并自动部署它。(带有JAX

  • 我正试图在NetBeans 7.4(今天发布)和GlassFish 4服务器下开发JAX-RS。 显然,NetBeans 7.4 应该使用 Jersey 2.0,但是在库下查看项目内的库 - javax.servlet-api.jar javax.ws.rs-api.jar … 所以我不确定Jersey和服务器使用的是哪个版本。因此,第一个问题是:我是否需要在运行时使用与编译时相同的JAX-RS实

  • JAX-RS (JSR 311) 是一个社区驱动的标准用于使用 Java 构建 RESTful Web 服务。

  • 问题内容: 我想知道pom.xml中描述的哪个依赖性在目标目录中带来了传递性依赖性。 更准确地说,我的WEB-INF / lib目录中有一个库“ poi-2.5.1-final-20040804.jar”,我想知道pom.xml中的哪个依赖项会带来这种情况。 问题答案: 要添加到@David Crow,下面是Maven站点中的dependency:tree示例: 可能输出

  • 我在为上载文件函数创建方法POST时发现了一个错误。如何解决这个问题?多谢了。 此日志错误: FileUploadController.java

  • 问题内容: 我真的很困惑。我已经尝试过使用tomcat的Jax-rs并使用所有能够使用调用我的服务的注释。因此,没有Jax- rs,我可以简单地拥有一个servlet并调用我的服务。同样,正如我尝试过的那样,有jax-rs和jersey(我研究了的实现)以及web.xml中的以下内容。 然后,我在GET上具有与JAX-RS相同的注释,可以使用正确的URL调用我的服务。 我的问题是,为什么球衣使用s