我的maven模块pom.xml
看起来像
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.ext</groupId>
<artifactId>jersey-spring3</artifactId>
<version>2.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.test.framework</groupId>
<artifactId>jersey-test-framework</artifactId>
<version>1.0.3.1</version>
<scope>test</scope>
</dependency>
</dependencies>
和资源类
@Service
@Path("/hello")
public class HelloResource {
@GET
public Response hello() {
return Response.ok("Hello World!").build();
}
}
这一切都很好。
的问题
- 我刚看到这个post,其中说的是
您需要JSR和实现。注释在 JSR,实现提供支持类
我可以知道为什么需要这个吗?
答案 0 :(得分:1)
您在那里的依赖关系将通过Maven传递依赖机制检索JSR API jar。所以,如果你问为什么它运作良好,那是因为jax.ws.rs-api 2.0将通过jersey-server提供 - &gt; jersey-common - &gt; jax.ws.rs-api path。
如果你问为什么两者都需要(甚至通过Maven传递依赖机制),那么我认为原因是API和实现之间的分离。您的代码在编译时依赖于JSR API,但在运行时它也需要实现。因此,理论上,可以将一个实现与另一个实现交换,而不会影响代码。