如果我在我的应用程序中包含以下 J2EE 依赖项,我就可以访问 servlet 和 JAX-RS 类和接口(interface):
<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
(这都是基本的东西;我不知道为什么我很困惑。我一定是遗漏了一些明显的东西。)
最佳答案
由于 JAX-RS 2.0
是 Java EE 7
的一部分,定义其 API 的类直接包含在 Artifact javax:javaee-api:7.0 中
所以只要你只使用标准类就足以编译你的程序。
关于java - servlet 和 JAX-RS 依赖项来自哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40489925/