2

私は今日何時間もインターネットを探し回っていますが、これを解決することはできません.

現時点で最新の Datanucleus パッケージで JPA 2.0 を使用するように Google App Engine プロジェクトを構成しようとしています。すべてが正常にコンパイルされますが、実行時例外が発生し続けます。

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ファイルの内容は次のとおりです。Google App Engine Web サイトの指示に従ってプロバイダーを更新しました

<?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 の依存関係の正確なバージョンは何ですか?

4

2 に答える 2

2

JPA 2.0 を使用していると言いますが、CLASSPATH にgeronimo-jpa_3.0_spec v1.1.1を入れています。これが JPA 1.0 API です。GAE JPA プラグインPOM によると、JPA 2.0 API であるため、geronimo-jpa_2.0_spec v1.1 を使用する方が理にかなっていますGAE JPA プラグインと DataNucleus の互換性はhttp://code.google.com/p/datanucleus-appengine/wiki/Compatibilityで定義されています

于 2013-02-06T05:03:49.077 に答える
0

Google AppEngine DataNucleus プラグインを使用:

<dependency>
    <groupId>com.google.appengine.orm</groupId>
    <artifactId>datanucleus-appengine</artifactId>
    <version>2.1.2</version>
</dependency>
于 2013-04-20T13:21:34.207 に答える