首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >servlet和JAX依赖关系从何而来?

servlet和JAX依赖关系从何而来?
EN

Stack Overflow用户
提问于 2016-11-08 14:50:16
回答 2查看 1K关注 0票数 3

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

代码语言:javascript
运行
复制
    <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,所以从表面上看,这就是答案。

但是所有这些依赖项都被标记为optional,这意味着除非我显式地包含它们,否则它们不会出现在我的项目中。但是,我的程序编译时只需依赖于javax:javaee-api:7.0。为什么?

这是我的依赖树,我看不出它们是从哪里来的:

代码语言:javascript
运行
复制
[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

(这些都是基本的东西,我不知道为什么我会感到困惑。我一定漏掉了一些显而易见的东西。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-08 14:58:58

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

票数 1
EN

Stack Overflow用户

发布于 2016-11-08 15:29:49

在这里,您需要理解<scope>provided</scope>的含义。当包含javax.servlet:javax.servlet-api:3.1.0依赖项时,javax.ws.rs:javax.ws.rs-api:2.0javaee-api将以provided的形式包含。这意味着,在编译类时,只使用,在运行时将使用这些jar文件,而不是。因为范围是provided,所以它期望这两个jars将由运行时环境提供。为了重新迭代,当任何jar作为provided包含在作用域中时,这意味着这个jar应该用于编译,但是对于运行时,它希望由运行时容器提供。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40489925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档