我刚刚开始使用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]
所以我的疑问是:
第一种情况可能是错误的原因是什么?它与代理设置有关吗?如果是,那么我应该在哪里/如何指定设置?
在第二种情况下,我不在任何代理之后可能导致错误的原因是什么?
我在这里错过了一些步骤吗?
此外,如果您查看此示例应用程序的源代码,则只有一个文件基本上会创建一个存储桶。存储桶作为参数从命令行传递。现在,根据我的理解,首先需要在云控制台中创建一个项目来创建任何资源。那么这个桶会在哪里创建?我们不应该指定要创建此存储桶的项目ID吗?
答案 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
您可以通过创建单个客户端来获取应用程序默认凭据 图书馆电话。返回的凭据由。确定 代码运行的环境。条件在中检查 以下顺序:
检查环境变量
GOOGLE_APPLICATION_CREDENTIALS
。如果指定了此变量,则应指向该文件 定义凭据。获取凭证的最简单方法 目的是在Google API控制台中创建服务帐户密钥:一个。转到API Console Credentials page。
湾从项目下拉列表中,选择您的项目。
℃。在“凭据”页面上,选择“创建凭据”下拉列表, 然后选择服务帐户密钥。
d。从“服务帐户”下拉列表中,选择现有服务 帐户或创建新帐户。
即对于Key type,选择JSON键选项,然后选择Create。该 文件自动下载到您的计算机。
F。将刚刚下载的* .json文件放在您的目录中 选择。这个目录必须是私人的(你不能让任何人获得 访问此内容),但可访问您的Web服务器代码。
克。将环境变量
GOOGLE_APPLICATION_CREDENTIALS
设置为 下载JSON文件的路径。如果您已在计算机上安装了Google Cloud SDK并且已运行命令
gcloud auth application-default login
,那么您的 identity可以用作代理来测试从中调用API的代码 机。如果您正在使用Google App Engine生产,则将使用与该应用程序关联的内置服务帐户。
如果您在Google Compute Engine生产中运行,则与虚拟机实例关联的内置服务帐户 将被使用。
- 醇>
如果这些条件都不成立,则会发生错误。