【问题标题】:Google App Engine JPA 2.0 - java.lang.ClassNotFoundException: javax.persistence.spi.ProviderUtilGoogle App Engine JPA 2.0 - java.lang.ClassNotFoundException: javax.persistence.spi.ProviderUtil
【发布时间】:2013-02-05 21:57:35
【问题描述】:

I have been scouring the internet for hours today 无法解决此问题。

我正在尝试将我的 Google App Engine 项目配置为使用 JPA 2.0 和最新的 Datanucleus 包。一切编译正常,但我不断收到运行时异常:

Caused by: java.lang.ClassNotFoundException: javax.persistence.spi.ProviderUtil

我包含了我的pom.xml 的相关部分,这些部分引用了所有持久性内容以及我的persistence.xml 文件。

这是我认为我的pom.xml 的相关部分:

<gae.version>1.7.4</gae.version>
<datanucleus.version>3.1.1</datanucleus.version>

<dependency>
    <groupId>javax.jdo</groupId>
    <artifactId>jdo-api</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.geronimo.specs</groupId>
    <artifactId>geronimo-jpa_2.0_spec</artifactId>
    <version>1.1</version>
</dependency>
<dependency>
    <groupId>com.google.appengine.orm</groupId>
    <artifactId>datanucleus-appengine</artifactId>
    <version>2.1.1</version>
</dependency>
<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-core</artifactId>
    <version>${datanucleus.version}</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-api-jpa</artifactId>
    <version>${datanucleus.version}</version>
</dependency>
<dependency>
    <groupId>org.datanucleus</groupId>
    <artifactId>datanucleus-api-jdo</artifactId>
    <version>${datanucleus.version}</version>
</dependency>

<plugin>
    <groupId>org.datanucleus</groupId>
    <artifactId>maven-datanucleus-plugin</artifactId>
    <version>${datanucleus.version}</version>
    <configuration>
        <api>JPA</api>
        <verbose>true</verbose>
    </configuration>
    <executions>
        <execution>
            <phase>process-classes</phase>
            <goals>
                <goal>enhance</goal>
            </goals>
        </execution>
    </executions>
 </plugin>

这是我的persistence.xml 文件内容:I updated the provider as per the instructions on the Google App Engine web site

<?xml version="1.0" encoding="UTF-8" ?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">

    <persistence-unit name="transactions-optional">
        <provider>org.datanucleus.api.jpa.PersistenceProviderImpl</provider>
        <properties>
            <property name="datanucleus.NontransactionalRead" value="true"/>
            <property name="datanucleus.NontransactionalWrite" value="true"/>
            <property name="datanucleus.ConnectionURL" value="appengine"/>
        </properties>
    </persistence-unit>
</persistence>

这是我得到的堆栈跟踪:

Caused by: java.lang.ClassNotFoundException: javax.persistence.spi.ProviderUtil
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:213)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 56 more

有人可以指出我缺少什么依赖项的正确方向吗?

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

【问题讨论】:

    标签: java google-app-engine jpa-2.0 maven-3 datanucleus


    【解决方案1】:

    您说您使用的是 JPA 2.0,但您将 geronimo-jpa_3.0_spec v1.1.1 放在了 CLASSPATH 中,这就是 JPA 1.0 API。根据GAE JPA plugin POM,使用 geronimo-jpa_2.0_spec v1.1 会更有意义,因为它是 JPA 2.0 API。 GAE JPA 插件和 DataNucleus 兼容性在http://code.google.com/p/datanucleus-appengine/wiki/Compatibility中定义

    【讨论】:

    • 如果找不到那个类,那么你的类路径中有一个 JPA 1.0 jar,它隐藏了 JPA 2.0 jar 类,就这么简单。
    【解决方案2】:

    使用Google AppEngine DataNucleus plugin:

    <dependency>
        <groupId>com.google.appengine.orm</groupId>
        <artifactId>datanucleus-appengine</artifactId>
        <version>2.1.2</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 1970-01-01
      • 2013-05-07
      • 1970-01-01
      • 2017-09-11
      • 2010-11-27
      • 1970-01-01
      • 2015-01-11
      • 2015-10-05
      相关资源
      最近更新 更多