Я понимаю, что вы прочитали документацию и выполнили все шаги, указанные здесь - https://cloud.google.com/storage/docs/reference/libraries#windows
Как упоминал @Джон Хэнли, вы проверить печать переменных среды?
Это определенно не связано с правами доступа владельца, поскольку исключение говорит java.io.IOException: The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
Теперь, чтобы решить эту проблему, выполните Вы хотите сделать только с помощью переменных среды? или другие подходы подойдут?
если вы согласны с другими подходами, взгляните на этот код
private void authImplicit() {
//please give exact file name for this credentials.json
Credentials credentials = GoogleCredentials
.fromStream(new FileInputStream("C:\\Users\\dbgno\\Keys\\credentials.json"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials)
.setProjectId("Some Project").build().getService();
System.out.println("Buckets:");
Page<Bucket> buckets = storage.list();
for (Bucket bucket : buckets.iterateAll()) {
System.out.println(bucket.toString());
}
}
Редактировать 1: работа над решением Попробуйте это и посмотрите, сможете ли вы прочитать файл JSON, который вы даете в качестве ввода. В заявлении на печать должна быть указана учетная запись службы, с помощью которой вы собираетесь аутентифицировать
public static Credential getDriveService(String fileLocation, String servAccAdmin)
throws IOException {
HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
GoogleCredential googleCredential =
GoogleCredential.fromStream(new FileInputStream(fileLocation), httpTransport, jsonFactory)
.createScoped(SCOPES);
System.out.println("--------------- " + googleCredential.getServiceAccountId());
Credential credential = new GoogleCredential.Builder()
.setTransport(googleCredential.getTransport())
.setJsonFactory(googleCredential.getJsonFactory())
.setServiceAccountPrivateKeyId(googleCredential.getServiceAccountPrivateKeyId())
.setServiceAccountId(googleCredential.getServiceAccountId()).setServiceAccountScopes(SCOPES)
.setServiceAccountPrivateKey(googleCredential.getServiceAccountPrivateKey())
.setServiceAccountUser(servAccAdmin).build();
return credential;
}
Редактировать 2:
Поскольку мы видим проблему с учетными данными, я пытаюсь чтобы увидеть, как я получаю доступ к любой другой службе API Google, может ли это быть диск или gmail, где мы вручную передаем файл ключа и создаем учетные данные, и эти учетные данные следует использовать при последующих вызовах службы. Теперь попробуйте добавить эти зависимости, это просто для устранения неполадок, используя тот же способ, которым мы получаем доступ к google drive / gmail и т. Д. c. Мы узнаем, может ли облачный API Google создать учетные данные или нет
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
<version>${project.http.version}</version>
</dependency>
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client-jackson2</artifactId>
<version>${project.http.version}</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>${project.oauth.version}</version>
</dependency>