0

在我们的 Cloud Endpoint 从 v1 迁移到 V2 的过程中,我们注意到客户端生成的 Service Definition 类的名称没有使用 @Api 注解定义中定义的 canonicalName

例如

@Api(name = "customer",
canonicalName = "CustomerAPI",
version = "v1",
...
public class CustomerEndpoint {
...

生成 customer-v1-java.zip 并使用名称 Customer 而不是 CustomerAPI 生成服务定义类。

我们应用的 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 的任何想法?

4

2 回答 2

0

简而言之,这是一个错误/意外遗漏。我将在下一个版本中修复它。

于 2018-02-27T00:42:29.537 回答
0

解决方法

正如 saiyr 所指出的,这是一个将在下一个版本中修复的错误。

对于正在寻找解决方法的任何人,这就是我在此期间为解决问题所做的。原来问题在于发现文档的生成。如果您有正确的发现文档,则其他一切都可以正常工作。

使用 app 的 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',
    ]
}

希望有帮助。

于 2018-02-28T02:30:28.200 回答