2015-02-04 8 views
0

최근에 AppEngine SDK 1.9.17로 업데이트되었습니다. 내 JUnit 테스트를 실행하려고하면 JDO를 사용하여 데이터 스토어에 액세스하려고 할 때마다 오류가 발생합니다. 특히 내가 오류는 다음과 같습니다SDK 1.9.17로 업그레이드 한 후 JUnit 테스트가 실패합니다.

java.lang.NoSuchMethodError: com.google.appengine.repackaged.com.google.io.protocol.ProtocolMessage.storeStringsOnlyAsBytes()Z 
at com.google.storage.onestore.v3.OnestoreEntity$Reference.setApp(OnestoreEntity.java:6598) 
at com.google.appengine.api.datastore.KeyTranslator.convertToPb(KeyTranslator.java:50) 
at com.google.appengine.api.datastore.EntityTranslator.convertToPb(EntityTranslator.java:48) 
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$4.toPb(AsyncDatastoreServiceImpl.java:178) 
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl$4.toPb(AsyncDatastoreServiceImpl.java:155) 
at com.google.appengine.api.datastore.Batcher$BatchIterator.<init>(Batcher.java:180) 
at com.google.appengine.api.datastore.Batcher$2.<init>(Batcher.java:317) 
at com.google.appengine.api.datastore.Batcher.getBatches(Batcher.java:317) 
at com.google.appengine.api.datastore.AsyncDatastoreServiceImpl.doBatchPut(AsyncDatastoreServiceImpl.java:365) 
at com.google.appengine.api.datastore.BaseAsyncDatastoreServiceImpl.put(BaseAsyncDatastoreServiceImpl.java:293) 
at com.google.appengine.api.datastore.BaseAsyncDatastoreServiceImpl$4.runInternal(BaseAsyncDatastoreServiceImpl.java:261) 
at com.google.appengine.api.datastore.TransactionRunner.runWriteInTransaction(TransactionRunner.java:53) 
at com.google.appengine.api.datastore.BaseAsyncDatastoreServiceImpl.put(BaseAsyncDatastoreServiceImpl.java:258) 
at com.google.appengine.api.datastore.BaseAsyncDatastoreServiceImpl.put(BaseAsyncDatastoreServiceImpl.java:234) 
at com.google.appengine.api.datastore.DatastoreServiceImpl.put(DatastoreServiceImpl.java:56) 
at com.google.appengine.datanucleus.WrappedDatastoreService.put(WrappedDatastoreService.java:100) 
at com.google.appengine.datanucleus.EntityUtils.putEntitiesIntoDatastore(EntityUtils.java:759) 
at com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObjectsInternal(DatastorePersistenceHandler.java:314) 
at com.google.appengine.datanucleus.DatastorePersistenceHandler.insertObject(DatastorePersistenceHandler.java:218) 
at org.datanucleus.state.JDOStateManager.internalMakePersistent(JDOStateManager.java:2381) 
at org.datanucleus.state.JDOStateManager.makePersistent(JDOStateManager.java:2357) 
at org.datanucleus.ObjectManagerImpl.persistObjectInternal(ObjectManagerImpl.java:1896) 
at org.datanucleus.ObjectManagerImpl.persistObjectWork(ObjectManagerImpl.java:1745) 
at org.datanucleus.ObjectManagerImpl.persistObject(ObjectManagerImpl.java:1602) 
at org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:731) 
at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:756) 
... 

내가 일반적으로 의존 항아리의 일부를 개방하고, 재 포장 com.google.io 패키지가 완전히 누락 된 것입니다.

것들 나는 시도했다 :

  1. 는 LIB/IMPL 디렉토리에 추가 google_sql.jar에 추가 시도 1.9.17
  2. 에 1.9.14에서 JUnit 테스트 내 클래스 경로를 업데이트
  3. 모든 LIB/IMPL 단지를 제거
  4. , 다음

이에 다른 사람 실행을 가지고 한 번에 하나씩 다시 추가?

답변

1

아하! JUnit 및 AppEngine의 documentation의 일부로 두 파일을 프로젝트의 WEB-INF/lib 디렉토리에 복사해야합니다.

appengine-api-labs.jar 
appengine-testing.jar 

업그레이드 할 때뿐만 아니라 이클립스에서 JUnit을 디버그 구성을 업데이트해야하지만 당신은 또한 나중에 SDK에서이 두 파일을 (복사/덮어 쓰기)를 업데이트해야합니까.

관련 문제