泽西岛:我是否还需要为JSR提供maven依赖?为什么?

时间:2014-05-03 15:12:31

标签: java spring maven spring-mvc

我的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,实现提供支持类

我可以知道为什么需要这个吗?

1 个答案:

答案 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,但在运行时它也需要实现。因此,理论上,可以将一个实现与另一个实现交换,而不会影响代码。