google-app-engine - 无法实例化 LocalCloudDatastoreV1Service

标签 google-app-engine gradle google-cloud-datastore

我正在测试我在 Google App Engine 模块中的一个类中的一种方法
在安卓工作室。我正在使用junit。

问题

当我尝试运行我的测试类时,这是得到的错误

java.util.ServiceConfigurationError: com.google.appengine.tools.development.LocalRpcService: Provider com.google.appengine.api.datastore.dev.LocalCloudDatastoreV1Service could not be instantiated
at java.util.ServiceLoader.fail(ServiceLoader.java:232)
at java.util.ServiceLoader.access$100(ServiceLoader.java:185)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:384)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at com.google.appengine.tools.development.ApiProxyLocalImpl.startServices(ApiProxyLocalImpl.java:604)
at com.google.appengine.tools.development.ApiProxyLocalImpl.access$700(ApiProxyLocalImpl.java:46)
at com.google.appengine.tools.development.ApiProxyLocalImpl$2.run(ApiProxyLocalImpl.java:588)
at com.google.appengine.tools.development.ApiProxyLocalImpl$2.run(ApiProxyLocalImpl.java:585)
at java.security.AccessController.doPrivileged(Native Method)
at com.google.appengine.tools.development.ApiProxyLocalImpl.getService(ApiProxyLocalImpl.java:584)
at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.callInternal(ApiProxyLocalImpl.java:500)
at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:479)
at com.google.appengine.tools.development.ApiProxyLocalImpl$AsyncApiCall.call(ApiProxyLocalImpl.java:456)
at java.util.concurrent.Executors$PrivilegedCallable$1.run(Executors.java:533)
at java.security.AccessController.doPrivileged(Native Method)
at java.util.concurrent.Executors$PrivilegedCallable.call(Executors.java:530)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

我已经用谷歌搜索了 2 天试图解决这个问题,但都是徒劳的

我应该怎么做 来解决这个问题?

更新

我的 android 项目有三个模块 A B C 。正在测试一个 java 类
C>src>test>java>BXC>BxcTest.java

我创建了一个名为 BXC 我的类(class)所在的测试文件夹
//This is saved in onther class that am accessing in BxcTest.java
 @Entity
public class Presidents{
@Id Long id;
String name;
int age;

public Presidents(Long pId, String pName, int pAge){
id = pId;
name = pName
age = pAge;
}

}

下面是我的 BxcTest.java 的样子
public class BxcTest {
static{
ObjectifyService.register(Presidents.class);
}
private final LocalServiceTestHelper helper =
        new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig());


@Before
public void setUp() {
    helper.setUp();
}


@Test
public void methodUnderTest() throws Exception {
//my code under test
Presidents p1 = new Presidents(new Long(1),Daniel,88);
Presidents p2 = new Presidents(new Long(2),Mwai,81);
Presidents p3 = new Presidents(new Long(3),Daniel,70);
ofy().save().entities.(p1,p2,p3).now();

}

@After
public void tearDown() {
    helper.tearDown();
}
}

更新 2. 引起的错误
Caused by: java.lang.IllegalAccessError: tried to access field com.google.appengine.repackaged.com.google.storage.onestore.v3.proto2api.OnestoreEntity$CompositeIndex.PARSER from class com.google.apphosting.datastore.shared.DatastoreProtoConverter
at com.google.apphosting.datastore.shared.DatastoreProtoConverter.<clinit>(DatastoreProtoConverter.java:62)
at com.google.appengine.api.datastore.dev.LocalCloudDatastoreV1Service.<clinit>(LocalCloudDatastoreV1Service.java:107)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)


Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.google.appengine.api.datastore.dev.LocalCloudDatastoreV1Service
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at java.lang.Class.newInstance(Class.java:442)
at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:380)

更新 3

这是我模块的 .gradle 文件
// If you would like more information on the gradle-appengine-plugin   please refer to the github page
// https://github.com/GoogleCloudPlatform/gradle-appengine-plugin

buildscript {
repositories {
    jcenter()
}
dependencies {
    classpath 'com.google.appengine:gradle-appengine-plugin:1.9.14'
}
}

repositories {
jcenter();
}

apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'appengine'

sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile fileTree(dir: 'testLibs', include: ['*.jar'])
appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.14'
compile 'com.google.appengine:appengine-endpoints:1.9.14'
compile 'com.google.appengine:appengine-endpoints-deps:1.9.14'
compile 'com.googlecode.objectify:objectify:5.0.3'
compile 'javax.servlet:servlet-api:2.5'
testCompile 'junit:junit:4.12'
testCompile 'org.mockito:mockito-core:1.9.5'
compile 'org.apache.httpcomponents:httpcomponents-client:4.4.1'
compile 'org.apache.httpcomponents:httpmime:4.4.1'
compile 'org.apache.httpcomponents:fluent-hc:4.4.1'
compile 'org.apache.httpcomponents:httpclient-cache:4.4.1'
testCompile 'org.json:json:20141113'
testCompile 'com.google.appengine:appengine-testing:1.9.21'
testCompile 'com.google.appengine:appengine-api-stubs:1.9.21'
testCompile 'com.google.appengine:appengine-api-labs:1.9.21'
testCompile 'com.google.appengine:appengine-api-1.0-sdk:1.9.21'
compile 'org.json:json:20140107'
compile 'com.google.appengine.tools:appengine-gcs-client:0.4.4'
compile 'org.igniterealtime.smack:smack:3.2.1'
}

appengine {
downloadSdk = true
appcfg {
    oauth2 = true
}
endpoints {
    getClientLibsOnBuild = true
    getDiscoveryDocsOnBuild = true
}
jvmFlags = ["-Ddatastore.backing_store=${rootDir}/data_store /local_db.bin".toString()]
}

task myCopyTask << {

copy {
    from 'src/main/assets'
    into 'build/exploded-app/assets'
}

copy {
    from '../keys'
    into 'build/exploded-app/keys'
}

copy {
    from '../cybs.properties'
    into 'build/exploded-app'
}
}

appengineRun.dependsOn myCopyTask

最佳答案

好的,让我们开始吧!

首先,你的测试不好。
要获得好的示例代码,请点击以下链接:
ConferenceApiGlobalQueryTest.java

其次,你应该清理你的 gradle.build 文件。
尝试以下依赖项:

dependencies {
    appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.24'
    compile 'com.google.appengine:appengine-api-1.0-sdk:1.9.24'
    compile 'com.google.appengine:appengine-endpoints:1.9.24'
    compile 'com.google.appengine:appengine-api-labs:1.9.24'

    compile 'com.googlecode.objectify:objectify:5.0.3'

    compile 'javax.servlet:servlet-api:2.5'
    compile 'javax.inject:javax.inject:1'

    testCompile 'com.google.appengine:appengine-testing:1.9.24'
    testCompile 'com.google.appengine:appengine-api-stubs:1.9.24'
    testCompile 'junit:junit:4.12'
}

如果在构建编译器时告诉您缺少一个包,只需将其添加回 build.gradle,然后再次尝试构建。对您来说一个不错的选择是只评论上面未列出的那些包。

关于google-app-engine - 无法实例化 LocalCloudDatastoreV1Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32581447/

相关文章:

java - 谷歌应用引擎 : problem getting objects from datastore in a task

java - Google App Engine 祖先查询

java - 为什么spring boot在打包时(使用gradle)不加载应用程序yml?

gradle - 为什么在构建期间执行我的 gradle 任务会被跳过?

jenkins - Jenkins-JBoss AS-使用jenkins重新启动服务器

python - 如何内省(introspection) App Engine 数据存储模型?

python - 如何使用 Reportlab 将生成的 PDF 保存到 App Engine Python 中的数据存储区

python - 与 Google App Engine 上的 NDB 的多对多关系

python - 如何在 Google AppEngine 上实现 "autoincrement"

java - 部署到 Google App Engine