org.glassfish.jersey.internal.RuntimeDelegateImpl未找到

Spa*_*006 29 java rest glassfish jax-rs jersey

我正在为我的项目使用jersey,并从字符串中解析URI.

UriBuilder.fromUri("http://localhost:8000").build();
Run Code Online (Sandbox Code Playgroud)

代码很简单,但我在下面收到错误

java.lang.ClassNotFoundException: org.glassfish.jersey.internal.RuntimeDelegateImpl
Run Code Online (Sandbox Code Playgroud)

似乎程序找不到代理人.我已导入javax.ws.rs.core.UriBuilder并且jersey-common 2.0应该在我的构建路径中包含委托.但我仍然得到这个错误.

有人知道如何解决它吗?谢谢!

Arc*_*ano 64

如果您使用的是Maven,请使用以下依赖项:

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>2.22.2</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

对于Gradle,以下内容将起作用:

testCompile 'org.glassfish.jersey.core:jersey-common:2.22.2'
Run Code Online (Sandbox Code Playgroud)

  • 如果你看看javax.ws.rs.ext.RuntimeDelegate#findDelegate,你会发现它默认使用org.glassfish.jersey.internal.RuntimeDelegateImpl.在生产中,您可能还有其他一些实现,但这不适用于您的测试. (4认同)
  • 你能解释为什么它需要这种依赖 (2认同)
  • 为什么要指定测试范围?这个类不适合生产吗? (2认同)

小智 7

针对Wildfly 10.1运行时进行开发,我不想将Jersey引入我的构建中。我用了Gradle

testRuntime "org.jboss.resteasy:resteasy-jaxrs:$versions.resteasy"
Run Code Online (Sandbox Code Playgroud)

resteasy版本是3.0.19.Final。这个罐子里装着

META-INF/services/javax.ws.rs.ext.RuntimeDelegate
Run Code Online (Sandbox Code Playgroud)

有一个条目

org.jboss.resteasy.spi.ResteasyProviderFactory
Run Code Online (Sandbox Code Playgroud)


小智 5

在我的情况下,问题是另一个正在使用的 Jar 名为: javax.ws.rs-api-2.0.jar

删除那个罐子解决了我的问题。

我用过的罐子:

<include name="jersey-client-1.9.jar" />
<include name="jersey-core-1.9.jar" />
<include name="jersey-multipart-1.9.jar" />
Run Code Online (Sandbox Code Playgroud)


小智 5

<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
    <version>2.26</version>
    <scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我遇到了 Java 8 和 jersey-common 2.22.2 的问题,但 2.26 可以工作。