Class 在 ubuntu tomcat 上找不到 com.sun.ws.rs.ext.RuntimeDelegateImpl
Class not found com.sun.ws.rs.ext.RuntimeDelegateImpl on ubuntu tomcat
我正在使用 GWT/P 构建一个使用 javax.ws.rs.client 与其他服务通信的网络应用程序。
使用的 Jersey 客户端:
<jersey.version>2.22.2</jersey.version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
它部署在 tomcat(7 和 9 版本,都按预期工作)。但是,在一台 ubuntu 服务器上 ,使用 tomcat 9 我得到以下异常:
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:122)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:91)
at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:69)
at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:80)
at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:99)
at org.glassfish.jersey.client.JerseyWebTarget.<init>(JerseyWebTarget.java:71)
at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:290)
at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:76)
我不知道为什么它在寻找 com.sun.ws.rs.ext.RuntimeDelegateImpl
而不是 org.glassfish.jersey.internal.RuntimeDelegateImpl
,而且它只发生在那个特定的服务器上(windows,亚马逊 AWS linux, docker linux 工作正常)。
我已经尝试将球衣版本增加到 2.27(不能增加更多,因为新版本与 GWT jetty 9.2.14 冲突)。
我尝试添加 META-INF/services/javax.ws.rs.ext.RuntimeDelegate
,第一行为 org.glassfish.jersey.internal.RuntimeDelegateImpl
。
似乎没有任何效果。我在这里错过了什么?有什么想法吗?
gwt-rest-dispatch 包含 jsr311-api.jar,这是导致问题的原因。
删除此依赖项(因为我的项目不使用它)解决了这个问题。
我遇到了和你类似的问题,我强制从 pom.xml 中删除了 jsr311-api 依赖项,所以我重建它并且它起作用了。
我认为依赖项 UriBuilder 与 AWS 依赖项冲突,
我用的时候Spring自己下载了2.0.11,我用的依赖是0.0.11,那时候我把两个都删了。
我正在使用 GWT/P 构建一个使用 javax.ws.rs.client 与其他服务通信的网络应用程序。
使用的 Jersey 客户端:
<jersey.version>2.22.2</jersey.version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
</dependency>
它部署在 tomcat(7 和 9 版本,都按预期工作)。但是,在一台 ubuntu 服务器上 ,使用 tomcat 9 我得到以下异常:
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.sun.ws.rs.ext.RuntimeDelegateImpl
at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:122)
at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:91)
at javax.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:69)
at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:80)
at javax.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:99)
at org.glassfish.jersey.client.JerseyWebTarget.<init>(JerseyWebTarget.java:71)
at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:290)
at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:76)
我不知道为什么它在寻找 com.sun.ws.rs.ext.RuntimeDelegateImpl
而不是 org.glassfish.jersey.internal.RuntimeDelegateImpl
,而且它只发生在那个特定的服务器上(windows,亚马逊 AWS linux, docker linux 工作正常)。
我已经尝试将球衣版本增加到 2.27(不能增加更多,因为新版本与 GWT jetty 9.2.14 冲突)。
我尝试添加 META-INF/services/javax.ws.rs.ext.RuntimeDelegate
,第一行为 org.glassfish.jersey.internal.RuntimeDelegateImpl
。
似乎没有任何效果。我在这里错过了什么?有什么想法吗?
gwt-rest-dispatch 包含 jsr311-api.jar,这是导致问题的原因。 删除此依赖项(因为我的项目不使用它)解决了这个问题。
我遇到了和你类似的问题,我强制从 pom.xml 中删除了 jsr311-api 依赖项,所以我重建它并且它起作用了。
我认为依赖项 UriBuilder 与 AWS 依赖项冲突, 我用的时候Spring自己下载了2.0.11,我用的依赖是0.0.11,那时候我把两个都删了。