我按照official guide中的说明完成了Android Studio 3中一些项目的迁移,但是在尝试在App Engine endpoints 后端模块上的gradle上运行 endpointsDiscoveryDocs 目标时出现错误 .

该错误是嵌套 NoClassDefFound 初始化 GenClientLibAction

引起:java.lang.NoClassDefFoundError:无法初始化类com.google.api.server.spi.tools.GenClientLibAction

这是我的设置文件:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
        classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.3'
    }
}

repositories {
    jcenter();
}

apply plugin: 'java'
apply plugin: 'war'
//apply plugin: 'appengine'
apply plugin: 'com.google.cloud.tools.appengine'  // App Engine tasks
apply plugin: 'com.google.cloud.tools.endpoints-framework-server'


sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7

dependencies {
    //appengineSdk 'com.google.appengine:appengine-java-sdk:1.9.54'
    providedCompile group: 'javax.servlet', name: 'servlet-api', version:'2.5'


    compile 'com.google.endpoints:endpoints-framework:2.0.8'
    compile 'com.google.endpoints:endpoints-framework-tools:2.0.8'

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


    implementation 'com.googlecode.objectify:objectify:5.1.17'
    implementation 'com.ganyo:gcm-server:1.0.2'
    implementation 'com.google.firebase:firebase-server-sdk:3.0.3'
    implementation 'com.google.appengine.tools:appengine-gcs-client:0.6'

}
endpointsServer {
    // Endpoints Framework Plugin server-side configuration
    hostname = "libre-gluten.appspot.com"
}

堆栈如下

org.gradle.api.tasks.TaskExecutionException:任务':后端:endpointsDiscoveryDocs'的执行失败 . 在org.gradle上的org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:100)org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:70)位于org.gradle.api.internal的org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:63)上的.api.internal.tasks.execution.SkipCachedTaskExecuter.execute(SkipCachedTaskExecuter.java:106)位于org.gradle.api.internal.tasks.execution的org.gradle.api.internal.tasks.execution.ResolveBuildCacheKeyExecuter.execute(ResolveBuildCacheKeyExecuter.java:60).tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54) . 在org.gradle.api.internal.tasks.exe . 执行(ValidatingTaskExecuter.java:58)org.gradle.api.internal.tasks.exe . 执行(SkipEmptySourceFilesTaskExecuter.java:88)org.gradle.api.internal.tasks.execution.ResolveTaskArtifac org.gradle.api.internal.tasks.exe . 执行(SkipTaskWithNoActionsExecuter.java:52)org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute中的tStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:52) SkipOnlyIfTaskExecuter.java:54)org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java: 34)在org.gradle上的org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker $ 1.run(DefaultTaskGraphExecuter.java:248)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336) . org.gradle.internal.progress.DefaultBuildOperationExecutor.execu中的internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328) org.gradle.internal.progress.DefaultBupeOperationExecutor.run(DefaultBuildOperationExecutor.java:107)中的org.gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:241)at org上的te(DefaultBuildOperationExecutor.java:197) .gradle.execution.taskgraph.DefaultTaskGraphExecuter $ EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:230)org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:124)at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.access $ 200(DefaultTaskPlanExecutor.java:80)org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute(DefaultTaskPlanExecutor.java:105)at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker $ 1.execute( DefaultTaskPlanExecutor.java:99)org.gradle.ex上的org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:625)在org.gradle.execution.taskgraph.DefaultTaskPlanExecutor $ TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:99)的orcution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:580)org.gradle.internal.concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute( ExecutorPolicy.java:63)atg.gradle.internal.concurrent.ManagedExecutorImpl $ 1.run(ManagedExecutorImpl.java:46)at org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)引起: java.lang.NoClassDefFoundError:无法在com.google.api.server.spi.tools.EndpointsTool . (EndpointsTool.java:55)初始化com.google.api.server.spi.tools.GenClientLibAction类 . com.google.cloud.tools.gradle.endpoints.framework.server.task.GenerateDiscoveryDocsTask.generateDiscoveryDocs(GenerateDiscoveryDocsTask.java:137)org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)at org . gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore $ StandardTaskAction.doExecute(DefaultTaskClassInfoStore.java:141)org.gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore $ StandardTaskAction.execute(DefaultTaskClassInfoStore.java:134)at org . gradle.api.internal.project.taskfactory.DefaultTaskClassInfoStore $ StandardTaskAction.execute(DefaultTaskClassInfoStore.java:121)位于org.gradle.api的org.gradle.api.internal.AbstractTask $ TaskActionWrapper.execute(AbstractTask.java:731) . internal.AbstractTask $ TaskActionWrapper.execute(AbstractTask.java:705)atg.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter $ 1.run(ExecuteActionsTaskExecuter.java:122)org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperation ord.gradle.internal.progress.DefaultBuildOperationExecutor.execute中的org.gradle.internal.progress.DefaultBuildOperationExecutor $ RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)上的Worker.execute(DefaultBuildOperationExecutor.java:336)(DefaultBuildOperationExecutor.java:197) org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:107)位于org.gradle.api.internal的org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:111) .tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:92)... 29更多

在Github项目中已经有一个open issue,但项目所有者没有反馈意见 .

我有几个项目停止因为这个问题,有人遇到这个,有任何想法如何解决这个错误?