Java 在GAE中运行Jersey时出现NoClassDefFoundError

Java 在GAE中运行Jersey时出现NoClassDefFoundError,java,google-app-engine,jersey,jax-rs,Java,Google App Engine,Jersey,Jax Rs,我试图在GAE中公开一个使用Jersey的web服务 我得到以下错误: [INFO] java.lang.NoClassDefFoundError: sun.misc.Unsafe is a restricted class. Please see the Google App Engine developer's guide for more details. [INFO] at com.google.appengine.tools.development.agent.runtime.Ru

我试图在GAE中公开一个使用Jersey的web服务

我得到以下错误:

[INFO] java.lang.NoClassDefFoundError: sun.misc.Unsafe is a restricted class. Please see the Google  App Engine developer's guide for more details.
[INFO]  at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
[INFO]  at org.glassfish.jersey.internal.util.collection.ConcurrentHashMapV8.getUnsafe(ConcurrentHashMapV8.java:3502)
[INFO]  at org.glassfish.jersey.internal.util.collection.ConcurrentHashMapV8.<clinit>(ConcurrentHashMapV8.java:3467)
[INFO]  at org.glassfish.jersey.internal.util.collection.DataStructures.createConcurrentMap(DataStructures.java:237)
[INFO]  at org.glassfish.jersey.message.internal.MessageBodyFactory.<init>(MessageBodyFactory.java:197)
[INFO]java.lang.NoClassDefFoundError:sun.misc.Unsafe是一个受限类。有关更多详细信息,请参阅谷歌应用程序引擎开发者指南。
[信息]位于com.google.appengine.tools.development.agent.runtime.runtime.reject(runtime.java:51)
[信息]位于org.glassfish.jersey.internal.util.collection.ConcurrentHashMapV8.getSafe(ConcurrentHashMapV8.java:3502)
[信息]位于org.glassfish.jersey.internal.util.collection.ConcurrentHashMapV8.(ConcurrentHashMapV8.java:3467)
[信息]位于org.glassfish.jersey.internal.util.collection.DataStructures.createConcurrentMap(DataStructures.java:237)
[信息]位于org.glassfish.jersey.message.internal.MessageBodyFactory.(MessageBodyFactory.java:197)
这是一个已知的问题吗?如果是,是否有解决办法

我使用Maven并使用以下依赖项将Jersey添加到项目中

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.3.1</version>
</dependency>

org.glassfish.jersey.containers
jersey容器servlet
2.3.1
以下是我在my web.xml中配置Jersey的部分:

    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.mycompany.myapplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

Jersey Web应用程序
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.mycompany.myapplication
1.

java.misc.Unsafe
在App Engine上的java运行时不可用。
java.misc.Unsafe
在App Engine上的java运行时不可用。
java.misc.Unsafe
在App Engine上的java运行时不可用。

java.misc.Unsafe
在App Engine上的java运行时不可用引擎。

您应该将java.misc.Unsafe添加到web应用程序的lib文件夹中,以便它在运行时可用

或者,我建议您使用NetBeans或任何其他IDE并从那里创建REST服务,它将自动配置所需的库并将它们添加到库文件夹中


最后,检查编译和部署时使用的JVM是否正确。

您应该将java.misc.Unsafe添加到web应用程序的lib文件夹中,以便在运行时可用

或者,我建议您使用NetBeans或任何其他IDE并从那里创建REST服务,它将自动配置所需的库并将它们添加到库文件夹中


最后,检查编译和部署时使用的JVM是否正确。

您应该将java.misc.Unsafe添加到web应用程序的lib文件夹中,以便在运行时可用

或者,我建议您使用NetBeans或任何其他IDE并从那里创建REST服务,它将自动配置所需的库并将它们添加到库文件夹中


最后,检查编译和部署时使用的JVM是否正确。

您应该将java.misc.Unsafe添加到web应用程序的lib文件夹中,以便在运行时可用

或者,我建议您使用NetBeans或任何其他IDE并从那里创建REST服务,它将自动配置所需的库并将它们添加到库文件夹中


最后,请检查编译和部署时使用的JVM是否正确。

您需要使用较旧版本的Jersey,因为版本2与GAE不兼容

谷歌将1.5版列为兼容版本:


根据我的经验,Jersey 1.17运行良好。

您需要使用较旧版本的Jersey,因为版本2与GAE不兼容

谷歌将1.5版列为兼容版本:


根据我的经验,Jersey 1.17运行良好。

您需要使用较旧版本的Jersey,因为版本2与GAE不兼容

谷歌将1.5版列为兼容版本:


根据我的经验,Jersey 1.17运行良好。

您需要使用较旧版本的Jersey,因为版本2与GAE不兼容

谷歌将1.5版列为兼容版本:


根据我的经验,Jersey 1.17运行良好。

我遇到了相同的问题:Jersey 2.3.1的所有功能都在本地运行,并且由于sun.misc.Unsafe类而在appengine上中断。 我不想回到以前的jersey版本,所以我检查了jersey源代码,也许可以找到一个补丁。我发现他们 实际上,根据标志JdkVersion.IS_UNSAFE_SUPPORTED选择ConcurrentMap实现,这会导致ConcurrentHashMap(不受支持时)或 或ConcurrentHashMapV8(如果支持)。 因此,我通过删除

static {

  boolean isUnsafeFound;

  try {
    isUnsafeFound = Class.forName("sun.misc.Unsafe") != null;
  } catch (Throwable t) {
    isUnsafeFound = false;
  }

  IS_UNSAFE_SUPPORTED = isUnsafeFound;
}
并将旗帜设置为

private static final boolean IS_UNSAFE_SUPPORTED = false;

有了这个,我的应用程序在appengine上的jersey 2.3.1上运行良好;)

我刚刚遇到了同样的问题:jersey 2.3.1的所有功能都在本地运行,而appengine上由于sun.misc.Unsafe类而中断。 我不想回到以前的jersey版本,所以我检查了jersey源代码,也许可以找到一个补丁。我发现他们 实际上,根据标志JdkVersion.IS_UNSAFE_SUPPORTED选择ConcurrentMap实现,这会导致ConcurrentHashMap(不受支持时)或 或ConcurrentHashMapV8(如果支持)。 因此,我通过删除

static {

  boolean isUnsafeFound;

  try {
    isUnsafeFound = Class.forName("sun.misc.Unsafe") != null;
  } catch (Throwable t) {
    isUnsafeFound = false;
  }

  IS_UNSAFE_SUPPORTED = isUnsafeFound;
}
并将旗帜设置为

private static final boolean IS_UNSAFE_SUPPORTED = false;

有了这个,我的应用程序在appengine上的jersey 2.3.1上运行良好;)

我刚刚遇到了同样的问题:jersey 2.3.1的所有功能都在本地运行,而appengine上由于sun.misc.Unsafe类而中断。 我不想回到以前的jersey版本,所以我检查了jersey源代码,也许可以找到一个补丁。我发现他们 实际上,根据标志JdkVersion.IS_UNSAFE_SUPPORTED选择ConcurrentMap实现,这会导致ConcurrentHashMap(不受支持时)或 或ConcurrentHashMapV8(如果支持)。 因此,我通过删除

static {

  boolean isUnsafeFound;

  try {
    isUnsafeFound = Class.forName("sun.misc.Unsafe") != null;
  } catch (Throwable t) {
    isUnsafeFound = false;
  }

  IS_UNSAFE_SUPPORTED = isUnsafeFound;
}
并将旗帜设置为

private static final boolean IS_UNSAFE_SUPPORTED = false;
有了这个,我的应用程序就可以工作了