2013-02-02 18 views
5

Ich versuche, einen einfachen Test mit JDO mit App Engine und einer Maven-Konfiguration zu erstellen.App Engine, JDO und Maven. Fehler beim Start

Meine Kompilierungs- und Datenverbesserungsschritte sind erfolgreich. Aber zur Laufzeit (beide mvn: Test und appengine: devserver) erhalte ich:

1) Error in custom provider, javax.jdo.JDOFatalInternalException: 
Class "com.google.appengine.datanucleus.DatastoreManager" was not found in the CLASSPATH. 
Please check your specification and your CLASSPATH. 

jedoch meine Classpath (Soll/demo/WEB-INF/lib) enthält: Datanucleus-appengine-2.1.1.jar

Und sind meine Abhängigkeiten die gleichen wie die in der Datanucleus Projekt POM Google angegeben:

<dependency> 
    <groupId>javax.jdo</groupId> 
    <artifactId>jdo-api</artifactId> 
    <version>3.0.1</version> 
    </dependency> 
    <dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-core</artifactId> 
    <version>[3.1.1, 3.2)</version> 
    <scope>runtime</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-api-jdo</artifactId> 
    <version>[3.1.1, 3.2)</version> 
    </dependency> 
    <dependency> 
    <groupId>com.google.appengine.orm</groupId> 
    <artifactId>datanucleus-appengine</artifactId> 
    <version>2.1.1</version> 
    </dependency> 

Vorschläge zu schätzen wissen.

RB

+0

Es kann ein Konflikt mit JDO-Version mit Datanucleus sein. Ändere Datanucleus-Core zu 3.0 – Sabarish

+0

@Sabarish, ich habe viele Versionskombinationen ausprobiert. Beginnend mit denen, auf die im ORM-Projekt von App Engine verwiesen wird (z. B. JDO: 3.0.1, DataNucleus: [3.1.1,3.2], ORM: 2.1.1): https://code.google.com/p/ datanucleus-appengine/source/browse/branches/2_1_1/pom.xml JOD/Datanucleus-Konflikte scheinen früher im Enhance-Stadium aufzutauchen. – rsb

+0

Also, [dies] (http://www.datanucleus.org/products/accessplatform_3_2/datastores/appengine.html) scheint die richtige Information zu haben (sehr schwer zu finden von der GAE-Dokumentation): datanucleus-appengine 2.1.1 erfordert org.datanucleus 3.1 (und das Plugin muss auch übereinstimmen). Jetzt habe ich jedoch einen anderen Erstellungsfehler: "Die Klasse" XXX "ist nicht persistent. Dies bedeutet, dass sie entweder nicht erweitert wurde oder dass die erweiterte Version der Datei nicht im CLASSPATH enthalten ist". (Mvn Datanuclues: verbessern läuft gut). Beginnen Sie, durch die prolix und bis jetzt unverständliche Log-Datei zu waten ... – rsb

Antwort

7

Ich habe alles funktioniert jetzt. Ich dachte, ich würde ein paar der Fallstricke teilen (da es mehrere Tage gedauert hat, um all das durchzugehen):

1). Alle Versionen spielen eine Rolle (insbesondere die Anpassung der App Engine ORM 2.1.1 an DataNucleus 3.1.1 - inklusive des Plugins).

http://www.datanucleus.org/products/accessplatform_3_2/datastores/appengine.html

Hier ist, was ich am Ende mit:

<dependency> 
    <groupId>javax.jdo</groupId> 
    <artifactId>jdo-api</artifactId> 
    <version>3.0.1</version> 
    </dependency> 
    <dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-core</artifactId> 
    <version>3.1.1</version> 
    <scope>runtime</scope> 
    </dependency> 
    <dependency> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>datanucleus-api-jdo</artifactId> 
    <version>3.1.2</version> 
    </dependency> 
    <dependency> 
    <groupId>com.google.appengine.orm</groupId> 
    <artifactId>datanucleus-appengine</artifactId> 
    <version>2.1.2</version> 
    </dependency> 

    ... 

    <plugin> 
    <groupId>org.datanucleus</groupId> 
    <artifactId>maven-datanucleus-plugin</artifactId> 
    <version>3.1.2</version> 
    <configuration> 
     <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration> 
     <verbose>false</verbose> 
     <fork>false</fork> 
    </configuration> 
    <executions> 
     <execution> 
     <phase>process-classes</phase> 
     <goals> 
      <goal>enhance</goal> 
     </goals> 
     </execution> 
    </executions> 
    </plugin> 

2). Überprüfen Sie das Ende des datanucleus.log, um zu bestätigen, dass Ihre Klassen erweitert wurden (via mvn datanucleus: enhance). Ich erkannte schließlich, dass meine Testklassen (in src/test) ignoriert wurden.

+1

http://code.google.com/p/datanucleus-appengine/wiki/Compatibility definiert, welche Versionen benötigt werden, in Kombination mit dem Maven pom.xml von die verschiedenen Plugins; das ist, was pom.xml Abhängigkeiten sind für alle –

+0

@rsb: Vielen Dank für die Veröffentlichung Ihrer resultierenden Pom. Ich bin am Ende verrückt geworden. Das hat meine Probleme gelöst. – m09

0

Ich habe falsch in pom.xml hinzugefügt und es funktioniert für mich

<plugins> 
      <plugin> 
       <groupId>org.datanucleus</groupId> 
       <artifactId>maven-datanucleus-plugin</artifactId> 
       <version>3.1.2</version> 
       <configuration> 
        **<fork>false</fork>** 
        <log4jConfiguration>${basedir}/log4j.properties</log4jConfiguration> 
        <verbose>true</verbose> 
       </configuration> 
       <executions> 
        <execution> 
         <phase>process-classes</phase> 
         <goals> 
          <goal>enhance</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins>