gcpjavasdk-cloud资源管理器项目和文件夹功能的依赖冲突

kqlmhetl  于 2021-07-07  发布在  Java
关注(0)|答案(1)|浏览(263)

我正在尝试使用gcp云资源管理器v1和v2的功能。v1具有在pom import for v2中找不到的项目的功能,v2具有在pom import for v1中找不到的文件夹的功能。导入两者只会导致冲突。我只能使用v1创建一个项目,或者使用v2创建一个文件夹。
我的用例要求我利用这两种功能,为gcp java库创建项目和文件夹的正确方法是什么?
com.google.api.services.cloudresourcemanager.model.project->适用于cloudresourcemanager的v1,而不是v2导入

/*(crm is an instance of CloudResourceManager)*/ crm.projects().create(project);

com.google.api.services.cloudresourcemanager.model.folder->在v2中工作,而不是在cloudresourcemanager的v1导入中工作

/*(crm is an instance of CloudResourceManager)*/
crm.folders().create(folder);

是否有一个不同的pom导入我应该使用的组合功能?
https://developers.google.com/apis-explorer/#p/cloudresourcemanager/v1/https://developers.google.com/apis explorer/#p/cloudresourcemanager/v2/
我想我忽略了一种方法论,即在使用gcp文件夹和java项目的sdk时,如何在java中创建gcp文件夹和项目。以下是有罪的pom进口(一个评论了目前)

<dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-cloudresourcemanager</artifactId>
            <version>v2-rev20201111-1.30.10</version>
        </dependency>
        <!--V1 has different libraries then V2-->
        <!--https://search.maven.org/artifact/com.google.apis/google-api-services-cloudresourcemanager/v1-rev20201111-1.30.10/jar-->
<!--        <dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-cloudresourcemanager</artifactId>
            <version>v1-rev20201111-1.30.10</version>
        </dependency>-->
gcuhipw9

gcuhipw91#

正如我在评论中解释的那样,这是不可能的。客户端库将自动生成(基于发现api)。而且,由于apiv2没有为项目重用v1定义/规范,而且不可能使用同一api的两个依赖项,因此不能在同一个项目中同时使用这两个依赖项。
解决方案是直接使用api。下面是一个调用createprojectapi的示例

GoogleCredentials credentials = GoogleCredentials.getApplicationDefault();
        HttpRequestFactory factory = new NetHttpTransport().createRequestFactory(new HttpCredentialsAdapter(credentials));

        GenericData createProjectData = new GenericData();
        createProjectData.set("name","gib-test-crmapi");
        createProjectData.set("project_id","gib-test-crmapi");
        JsonHttpContent createProjectContent = new JsonHttpContent(JacksonFactory.getDefaultInstance(), createProjectData);
        HttpRequest request = factory.buildPostRequest(new GenericUrl("https://cloudresourcemanager.googleapis.com/v1/projects"),createProjectContent);

        JsonObjectParser parser = new JsonObjectParser(JacksonFactory.getDefaultInstance());
        request.setParser(parser);
        request.setThrowExceptionOnExecuteError(false);

        HttpResponse httpResponse = request.execute();

        int statusCode = httpResponse.getStatusCode();
        if (statusCode != HttpStatusCodes.STATUS_CODE_OK) {
            throw new IOException(
                    String.format(
                            "Unexpected Error code %s trying to getIDToken: %s",
                            statusCode, httpResponse2.parseAsString()));
        }
        InputStream content = httpResponse.getContent();
        if (content == null) {
            throw new IOException("Empty content from generateIDToken server request.");
        }

        GenericJson responseData = httpResponse.parseAs(GenericJson.class);
        System.out.println(responseData.toPrettyString());

您只需要googleauth客户端库;包括在客户端库中。
例如,使用资源管理器v2进行文件夹管理(比项目管理更复杂),并使用我的代码示例创建项目。不需要新的导入,资源管理器v2已经包含了googleauth客户端库!

相关问题