调用引擎部署后com.google.api.Service.hasQuota的NoSuchMethodError



部署我的Google端点API后,即使我只命中了服务器url/或/_ah/warm-up ,我也会收到下面的错误

Uncaught exception from servlet
java.lang.NoSuchMethodError: com.google.api.Service.hasQuota()Z
at com.google.api.control.model.MethodRegistry.extractQuota(MethodRegistry.java:290)
at com.google.api.control.model.MethodRegistry.<init>(MethodRegistry.java:72)
at com.google.api.control.ConfigFilter.init(ConfigFilter.java:89)

疯狂的是这种情况会间歇性地发生。有时部署只是起作用,但大多数时候都会失败。

在3月1日之前,这一直可以正常工作,所以我也回滚了gcloud组件版本,但仍然得到了相同的错误。

如果appengine和endpoints库存在,则尝试升级到最新版本,但仍然收到以下错误。

EDIT-1

这是供参考的build.gradle

buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
// App Engine Gradle plugin
classpath 'com.google.cloud.tools:appengine-gradle-plugin:2.4.1'
// Endpoints Frameworks Gradle plugin
classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:2.1.0'
}
}
// Dev
def projectIdValue = 'dev-sample-api'
repositories {
mavenCentral()
jcenter()
}
apply plugin: 'java'
apply plugin: 'war'
apply plugin: 'com.google.cloud.tools.appengine'
apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
sourceSets {
main {
java {
srcDirs 'src/main/java'
}
}
}
dependencies {
// App Engine API
implementation group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version: '1.9.86'
// Endpoints Frameworks v2.0
implementation ('com.google.endpoints:endpoints-framework:2.2.2') {
exclude group: 'org.slf4j', module: 'slf4j-nop'
}
implementation group: 'com.google.endpoints', name: 'endpoints-management-control-appengine', version: '1.0.14'
implementation group: 'com.google.endpoints', name: 'endpoints-framework-auth', version: '1.0.14'
implementation group: 'com.google.protobuf', name: 'protobuf-java-util', version: '3.15.6'
implementation group: 'io.grpc', name: 'grpc-stub', version: '1.36.0'
implementation group: 'io.grpc', name: 'grpc-protobuf', version: '1.36.0'

// App Engine and Endpoint dependencies
compileOnly 'javax.servlet:javax.servlet-api:3.1.0'
implementation 'jstl:jstl:1.2'
implementation group: 'javax.inject', name: 'javax.inject', version: '1'
// Logging
implementation 'org.slf4j:slf4j-api:1.7.30'
implementation 'org.slf4j:slf4j-jdk14:1.7.30'
// Objectify for data storage and access
implementation 'com.googlecode.objectify:objectify:5.1.9'
// Common Utils and Libraries
implementation 'com.google.guava:guava:20.0'
implementation 'commons-validator:commons-validator:1.6'
implementation 'joda-time:joda-time:2.10.8'
implementation group: 'com.darwinsys', name: 'hirondelle-date4j', version: '1.5.1'
}
endpointsServer {
// Endpoints Framework Plugin server-side configuration
hostname = "${projectIdValue}.appspot.com"
}

// this replaces the ${endpoints.project.id} in appengine-web.xml and web.xml
task replaceProjectId(type: Copy) {
from 'src/main/webapp/WEB-INF/'
include '*.xml'
into "build/exploded-${archivesBaseName}/WEB-INF"
expand(endpoints:[project:[id:projectIdValue]])
filteringCharset = 'UTF-8'
}
assemble.dependsOn replaceProjectId
appengine {
deploy {   // deploy configuration
version = "GCLOUD_CONFIG"
projectId = "GCLOUD_CONFIG"
def promoteProp = findProperty("appengine.deploy.promote")
if (promoteProp != null) {
promote = new Boolean(promoteProp)
}
}
run {
host = "0.0.0.0"
port = 8080
}
}

对于记录,正确的命令行是:

gcloud components update

根据@RafaelLemos的建议关闭。

"也许这是某个组件"的旧版本的问题;

不可复制。可能修复

gcloud components update