如果我在我的应用程序中包含以下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.0
和javax.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
(这些都是基本的东西;我不知道我为什么感到困惑。我一定错过了一些明显的东西。)
在这里,您需要理解< code >的含义
现在回答您的问题,如果您考虑任何运行时环境容器,例如JBOSS
、WA
等,它们都与这些jar捆绑在一起。因此,在编译类时,它将使用作为javaee-api
的传递依赖项的jar,但在运行时,它将使用与容器捆绑在一起的jar。因此,您不会收到任何错误。
由于JAX-RS 2.0
是JavaEE 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 服务。
我在为上载文件函数创建方法POST时发现了一个错误。如何解决这个问题?多谢了。 此日志错误: FileUploadController.java
问题内容: 我想知道pom.xml中描述的哪个依赖性在目标目录中带来了传递性依赖性。 更准确地说,我的WEB-INF / lib目录中有一个库“ poi-2.5.1-final-20040804.jar”,我想知道pom.xml中的哪个依赖项会带来这种情况。 问题答案: 要添加到@David Crow,下面是Maven站点中的dependency:tree示例: 可能输出
问题内容: 我真的很困惑。我已经尝试过使用tomcat的Jax-rs并使用所有能够使用调用我的服务的注释。因此,没有Jax- rs,我可以简单地拥有一个servlet并调用我的服务。同样,正如我尝试过的那样,有jax-rs和jersey(我研究了的实现)以及web.xml中的以下内容。 然后,我在GET上具有与JAX-RS相同的注释,可以使用正确的URL调用我的服务。 我的问题是,为什么球衣使用s