2013-02-02 14 views
5

Próbuję utworzyć prosty test przy użyciu JDO z App Engine i konfiguracją Maven.App Engine, JDO and Maven. Błąd przy uruchomieniu

Moje kroki w zakresie kompilacji i ulepszania danych kończą się sukcesem. Ale przy starcie (zarówno mvn: testowej i interfejsu App Engine: devserver) uzyskać:

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. 

Jednak moja ścieżka klasy (target/demo/WEB-INF/lib) nie zawiera: datanucleus-AppEngine-2.1.1.jar

a moi zależności są takie same, jak te określone w POM projektu datanucleus Google:

<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> 

wdzięczni za wszelkie sugestie.

RB

+0

Może istnieć konflikt z wersji JDO z datanucleus. zmień rdzeń jądra na 3.0 – Sabarish

+0

@Sabarish, próbowałem wielu kombinacji wersji. Począwszy od tych, do których odwołuje się projekt ORM App Engine (np. 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 Konflikty JOD/datanucleus wydają się pojawiać wcześniej na etapie ulepszania. – rsb

+0

Tak, [this] (http://www.datanucleus.org/products/accessplatform_3_2/datastores/appengine.html) wydaje się mieć odpowiednie informacje (bardzo trudne do znalezienia w dokumentach GAE): datanucleus-appengine 2.1.1 wymaga org.datanucleus 3.1 (i wtyczka musi również pasować). Jednak teraz mam inny błąd kompilacji: "Klasa" XXX "nie jest trwała, co oznacza, że ​​albo nie została ulepszona, albo że ulepszona wersja pliku nie znajduje się w CLASSPATH". (mvn datanuclues: enhanced runs fine). Zaczynamy przeglądać plik logiczny prolix i do tej pory nieczytelny ... – rsb

Odpowiedz

7

Mam wszystko teraz działa. Pomyślałem, że podzielę się kilkoma gargami (odkąd zajęło mi to kilka dni):

1). Wszystkie wersje są naprawdę ważne (w szczególności pasujące do App Engine ORM 2.1.1 do DataNucleus 3.1.1 - łącznie z wtyczką).

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

Oto, co skończyło się z:

<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). Sprawdź koniec pliku datanucleus.log, aby potwierdzić, że twoje klasy zostały ulepszone (przez mvn datanucleus: enhance). W końcu zdałem sobie sprawę, że moje klasy testowe (w src/test) były ignorowane.

+1

http://code.google.com/p/datanucleus-appengine/wiki/Compatibility określa, jakie wersje są potrzebne, w połączeniu z pom.xml Maven z różne wtyczki; to właśnie są zależności pom.xml dla wszystkich –

+0

@rsb: wielkie dzięki za opublikowanie wynikowej pom. Na końcu zwariowałem. To rozwiązało moje problemy. – m09

0

Dodałem fałszywy w pom.xml i to działa na mnie

<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>