2013-02-02 90 views
5

我試圖用App Engine和Maven配置創建一個使用JDO的簡單測試。App Engine,JDO和Maven。啓動時出錯

我的編譯和數據增強步驟成功。但在運行時(這兩個MVN:測試和AppEngine上:devserver)我得到:

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. 

然而,我的類路徑(目標/演示/ WEB-INF/lib中)不包含:DataNucleus將-AppEngine上-2.1.1.jar

我的依賴關係是相同的谷歌DataNucleus將項目的POM規定:

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

欣賞任何建議。

RB

+0

可能有JDO版本DataNucleus將與衝突。將datanucleus-core更改爲3.0 – Sabarish

+0

@Sabarish,我嘗試了很多版本組合。從App Engine ORM項目中引用的那些開始(即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衝突似乎較早出現。 – rsb

+0

因此,[這](http://www.datanucleus.org/products/accessplatform_3_2/datastores/appengine.html)似乎有正確的信息(很難從GAE文檔中找到):datanucleus-appengine 2.1.1需要org.datanucleus 3.1(並且插件也需要匹配)。但是,現在我有一個不同的構建錯誤:「類」XXX「不可持久化,這意味着它未被增強,或者文件的增強版本不在CLASSPATH中。 (mvn datanuclues:提升運行正常)。開始通過prolix和迄今爲止難以理解的日誌文件... – rsb

回答

7

我現在一切正常。我想我會分享幾個陷阱(因爲我花了幾天的時間來研究所有這些):

1)。所有的版本都很重要(特別是將App Engine ORM 2.1.1與DataNucleus 3.1.1 - 包括插件進行匹配)。

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

這裏是我結束了:

<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)。檢查datanucleus.log的尾部,以確認你的課程是增強的(通過mvn datanucleus:增強)。我最終意識到我的測試類(在src/test中)被忽略了。

+1

http://code.google.com/p/datanucleus-appengine/wiki/Compatibility定義需要哪些版本,並結合Maven pom.xml各種插件;這就是pom.xml的依賴關係,畢竟 –

+0

@rsb:非常感謝你發佈你的pom。最後我瘋了。這解決了我的問題。 – m09

0

我已經在pom.xml中添加和它的作品對我來說

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