无法运行Google云平台的示例应用程序

时间:2017-06-15 13:34:18

标签: maven google-cloud-platform google-cloud-storage

我刚刚开始使用google-cloud-platform。我在云控制台上创建了一个帐户和一个项目。我试图运行一些提供的示例应用程序。 我开始使用以下提供的云存储示例应用程序:

https://github.com/GoogleCloudPlatform/java-docs-samples/tree/master/storage/cloud-client

我在PC上安装了apache maven 3.5.0。 我按照链接中提供的步骤操作,即我提供了以下命令:

mvn clean package -DskipTests

然后

mvn exec:java -Dexec.mainClass=com.example.storage.QuickstartSample -Dexec.args="my-bucket-name"

第一个命令成功。但是,第二个命令失败。 我收到以下错误:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:06 min
[INFO] Finished at: 2017-06-15T18:27:55+05:30
[INFO] Final Memory: 15M/172M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project storage-google-cloud-samples: An exception occured while executing the Java class. connect timed out -> [Help 1]

现在,我运行此命令的计算机位于代理服务器后面。但是,我的代理设置已在文件conf / settings.xml中设置,当我运行第一个命令时,它成功下载了一些软件包,所以我不确定是否是由于某些代理问题,但是检查,我在另一台机器上试了一下,它不在代理服务器后面。

我给了同样的两个命令。第一个成功,第二个成功再次失败,出现以下(不同)错误:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:02 min
[INFO] Finished at: 2017-06-15T18:22:31+05:30
[INFO] Final Memory: 13M/32M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (d
efault-cli) on project storage-google-cloud-samples: An exception occured while
executing the Java class. 401 Unauthorized -> [Help 1]

所以我的疑问是:

  1. 第一种情况可能是错误的原因是什么?它与代理设置有关吗?如果是,那么我应该在哪里/如何指定设置?

  2. 在第二种情况下,我不在任何代理之后可能导致错误的原因是什么?

  3. 我在这里错过了一些步骤吗?

  4. 此外,如果您查看此示例应用程序的源代码,则只有一个文件基本上会创建一个存储桶。存储桶作为参数从命令行传递。现在,根据我的理解,首先需要在云控制台中创建一个项目来创建任何资源。那么这个桶会在哪里创建?我们不应该指定要创建此存储桶的项目ID吗?

1 个答案:

答案 0 :(得分:1)

TL; DR - 您错过了凭据,该示例依赖于调用所需的Google Cloud API。使用任何客户端库使用Google Cloud API时,建议使用Application Default Credentials

更长的版本

该示例依赖于Application Default Credentials(您正在使用的github repo的as explained in the README.md)。

  

How the Application Default Credentials work

     

您可以通过创建单个客户端来获取应用程序默认凭据   图书馆电话。返回的凭据由。确定   代码运行的环境。条件在中检查   以下顺序:

     
      
  1. 检查环境变量GOOGLE_APPLICATION_CREDENTIALS。如果指定了此变量,则应指向该文件   定义凭据。获取凭证的最简单方法   目的是在Google API控制台中创建服务帐户密钥:

         

    一个。转到API Console Credentials page

         

    湾从项目下拉列表中,选择您的项目。

         

    ℃。在“凭据”页面上,选择“创建凭据”下拉列表,   然后选择服务帐户密钥。

         

    d。从“服务帐户”下拉列表中,选择现有服务   帐户或创建新帐户。

         

    即对于Key type,选择JSON键选项,然后选择Create。该   文件自动下载到您的计算机。

         

    F。将刚刚下载的* .json文件放在您的目录中   选择。这个目录必须是私人的(你不能让任何人获得   访问此内容),但可访问您的Web服务器代码。

         

    克。将环境变量GOOGLE_APPLICATION_CREDENTIALS设置为   下载JSON文件的路径。

  2.   
  3. 如果您已在计算机上安装了Google Cloud SDK并且已运行命令gcloud auth application-default login,那么您的   identity可以用作代理来测试从中调用API的代码   机。

  4.   
  5. 如果您正在使用Google App Engine生产,则将使用与该应用程序关联的内置服务帐户。

  6.   
  7. 如果您在Google Compute Engine生产中运行,则与虚拟机实例关联的内置服务帐户   将被使用。

  8.   
  9. 如果这些条件都不成立,则会发生错误。

  10.