在我们的Cloud Endpoint从v1迁移到V2期间,我们注意到客户端中生成的Service Definition类的名称不使用@Api注释定义中定义的canonicalName
例如
@Api(name = "customer",
canonicalName = "CustomerAPI",
version = "v1",
...
public class CustomerEndpoint {
...
生成customer-v1-java.zip,使用Customer而不是CustomerAPI生成Service Definition类。
我们的应用程序的build.gradle如下所示
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
}
}
apply plugin: 'com.android.application'
apply plugin: 'com.google.cloud.tools.endpoints-framework-client'
apply plugin: 'io.fabric'
...
dependencies {
...
endpointsServer project(path: ':servers:api', configuration: 'endpoints')
}
虽然servers / api中的build.gradle如下
buildscript {
repositories {
mavenCentral()
jcenter()
}
dependencies {
// App Engine Gradle plugin
classpath 'com.google.cloud.tools:appengine-gradle-plugin:1.3.3'
// Endpoints Frameworks Gradle plugin
classpath 'com.google.cloud.tools:endpoints-framework-gradle-plugin:1.0.2'
}
}
...
apply plugin: 'com.google.cloud.tools.appengine'
apply plugin: 'com.google.cloud.tools.endpoints-framework-server'
...
dependencies {
providedCompile group: 'javax.servlet', name: 'servlet-api', version:'2.5'
compile 'jstl:jstl:1.2'
compile group: 'javax.inject', name: 'javax.inject', version: '1'
compile group: 'com.google.appengine', name: 'appengine-api-1.0-sdk', version: '1.9.49'
compile group: 'com.google.endpoints', name: 'endpoints-framework', version: '2.0.8'
...
}
appengine {
deploy { // deploy configuration
version = findProperty("appengine.deploy.version")
def promoteProp = findProperty("appengine.deploy.promote")
if (promoteProp != null) {
promote = new Boolean(promoteProp)
}
}
run {
host = "0.0.0.0"
port = 8080
jvmFlags = ['-Ddatastore.backing_store=../../../local_db.bin']
}
}
def projectId = 'some-api-project'
endpointsServer {
hostname = "${projectId}.appspot.com"
}
endpointsClientLibs {
hostname = "${projectId}.appspot.com"
}
为什么canonicalName没有得到尊重的任何想法?
答案 0 :(得分:0)
简单地说,这是一个错误/意外遗漏。我将在下一个版本中修复它。
答案 1 :(得分:0)
替代方法
正如saiyr所指出的,这是一个将在下一个版本中修复的错误。
对于任何寻找解决方法的人来说,这就是我在此期间解决问题的方法。原来问题在于发现doc的生成。如果你有正确的发现文档,其他一切都可以正常工作。
使用应用程序的build.gradle中的标准gradle依赖项生成客户端库
endpointsServer project(path: ':servers:api', configuration: 'endpoints')
这将生成文件夹
下的发现文档app/build/endpointsDiscoveryDocsFromDependencies
将此文件夹中的发现文档复制到新文件夹中
app/docs/api/discovery
现在编辑应用程序的build.gradle并注释掉端点依赖项并添加目标以从给定的一组发现文档生成客户端库
dependencies {
...
// Commented out to suppress generation of client library
// endpointsServer project(path: ':servers:api', configuration: 'endpoints')
}
// Use this target to generate client library instead
endpointsClient {
discoveryDocs = [
'docs/api/discovery/customer-v1-rest.discovery',
]
}
希望有所帮助。