Java 使用Datanucleus Rest API时出错

Java 使用Datanucleus Rest API时出错,java,google-app-engine,datanucleus,Java,Google App Engine,Datanucleus,当我对本地Appengine开发服务器中的Datanucleus Rest资源执行Http POST时,服务器会抛出以下错误: Caused by: java.lang.ClassNotFoundException: org.datanucleus.NucleusContext at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoa

当我对本地Appengine开发服务器中的Datanucleus Rest资源执行Http POST时,服务器会抛出以下错误:

Caused by: java.lang.ClassNotFoundException: org.datanucleus.NucleusContext
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    ... 37 more
Error : An error occurred trying to instantiate an instance of the API adapter "org.datanucleus.api.jdo.JDOAdapter" (perhaps you dont have the requisite datanucleus-api-XXX jar in the CLASSPATH?) : {1}
org.datanucleus.exceptions.NucleusUserException: Error : An error occurred trying to instantiate an instance of the API adapter "org.datanucleus.api.jdo.JDOAdapter" (perhaps you dont have the requisite datanucleus-api-XXX jar in the CLASSPATH?) : {1}
从表面上看,平台不允许在appengine上使用Rest API

编辑: pom中的Datanucleus:

<dependency>
    <groupId>com.google.appengine.orm</groupId>
    <artifactId>datanucleus-appengine</artifactId>
    <version>2.0.0</version>
</dependency>
<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-core</artifactId>
    <version>3.0.0-release</version>
</dependency>

<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-api-jpa</artifactId>
    <version>3.0.0-release</version>
</dependency>
<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-jpa_2.0_spec</artifactId>
    <version>1.0</version>
</dependency>

        <!-- Required by Datanucleus REST API -->
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-rest</artifactId>
            <version>2.0.0-release</version>
        </dependency>
        <dependency>
            <groupId>net.sf.flexjson</groupId>
            <artifactId>flexjson</artifactId>
            <version>2.1</version>
        </dependency>
        <dependency>
            <groupId>org.datanucleus</groupId>
            <artifactId>datanucleus-json</artifactId>
            <version>2.0.0-release</version>
        </dependency>

因此,您使用了一些版本的datanucleus api rest(可能是3.x版),但没有必要的datanucleus核心版本(也是3.x版)。这通常就是ClassNotFoundException的意思

我将依赖项添加到POM中,现在我得到了这个错误:java.lang.ClassNotFoundException:org.datanucleus.api.rest.restservlet我已经将POM和jar列表添加到问题中,运行时加载的JAR可能存在一些兼容性问题。当您将datanucleus v3.0与其他JAR一起使用时,为什么要使用datanucleus rest 2.0?最好只使用datanucleus api rest v3.0和datanucleus core v3.0。我不确定Google Appenginee是否支持datanucleus v3.0。您使用的是GAE JPA插件v2.0,它使用的是datanucleus v3.0,所以可以。事实上,如果您从SVN构建其插件的v2.1,它将使用DataNucleus v3.1。