Google应用程序引擎JPA 2.0-java.lang.ClassNotFoundException:javax.persistence.spi.ProviderUtil

Google应用程序引擎JPA 2.0-java.lang.ClassNotFoundException:javax.persistence.spi.ProviderUtil,java,google-app-engine,jpa-2.0,maven-3,datanucleus,Java,Google App Engine,Jpa 2.0,Maven 3,Datanucleus,无法解决这个问题 我正在尝试将我的Google App Engine项目配置为使用JPA 2.0和最新的Datanucleus软件包。一切都编译得很好,但我总是遇到运行时异常: 原因:java.lang.ClassNotFoundException:javax.persistence.spi.ProviderUtil 我包括了我的pom.xml的相关部分,这些部分引用了所有持久性的东西以及我的persistence.xml文件 以下是我的pom.xml的相关部分: 1.7.4 3.1.1 jav

无法解决这个问题

我正在尝试将我的Google App Engine项目配置为使用JPA 2.0和最新的Datanucleus软件包。一切都编译得很好,但我总是遇到运行时异常:

原因:java.lang.ClassNotFoundException:javax.persistence.spi.ProviderUtil

我包括了我的
pom.xml
的相关部分,这些部分引用了所有持久性的东西以及我的
persistence.xml
文件

以下是我的
pom.xml
的相关部分:

1.7.4
3.1.1
javax.jdo


org.datanucleus.api.jpa.PersistenceProviderImpl
下面是我得到的堆栈跟踪:

原因:java.lang.ClassNotFoundException:javax.persistence.spi.ProviderUtil
位于java.net.URLClassLoader$1.run(URLClassLoader.java:202)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:190)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:306)
位于com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:213)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:247)
... 56多
有人能给我指出我缺少的依赖的正确方向吗?


我需要的最新库的Datanucleus、Google和JPA依赖项的确切版本是什么?

您说您使用的是JPA 2.0,但您将geronimo-JPA_3.0_spec v1.1.1放在类路径中,这就是JPA 1.0 API。根据POM,使用geronimo-jpa_2.0_spec v1.1将更有意义,因为它是jpa 2.0 API。GAE JPA插件和DataNucleus的兼容性在使用中定义:


com.google.appengine.orm
datanucleus appengine
2.1.2

如果找不到该类,那么类路径中就有一个JPA1.0JAR,它隐藏了JPA2.0JAR类,就这么简单。
<dependency>
    <groupId>com.google.appengine.orm</groupId>
    <artifactId>datanucleus-appengine</artifactId>
    <version>2.1.2</version>
</dependency>