2013-02-02 2 views
5

App Engine 및 Maven 구성을 사용하여 JDO를 사용하여 간단한 테스트를 만들려고합니다.App Engine, JDO 및 Maven. 시작시 오류가 발생했습니다.

내 컴파일 및 데이터 향상 단계가 성공합니다. 그러나 런타임에 (MVN 모두 : 테스트 및 애플리케이션 엔진 : 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

datanucleus와 JDO 버전과 충돌이있을 수 있습니다 것이 작동합니다. 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/ JOD/datanucleus 충돌이 강화 단계의 초기에 표시되는 것 같습니다. – rsb

+0

그래서 [this] (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 : enhance를 통해). 나는 결국 내 테스트 클래스 (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>