如何使用 GoogleCredentials 而不是已弃用的 GoogleCredential 来初始化 Google 驱动器

How to initialise Google drive using GoogleCedentials instead of the deprecated GoogleCedential

我有 java 使用服务帐户连接到 google 驱动器的代码,这有效:

JsonFactory JSON_FACTORY = new GsonFactory();

GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream("sa.json"))
                .createScoped(List.of(DriveScopes.DRIVE))
                .createDelegated("foo@bar.com");

return new Drive.Builder(GoogleNetHttpTransport.newTrustedTransport(), JSON_FACTORY, credential)
                .setApplicationName("my-drive-app")
                .build();

但是我收到弃用警告,指出 GoogleCredential 已弃用,我应该使用 google-auth-library 中的 GoogleCredentials(注意末尾的额外 s)。

我可以这样初始化GoogleCredentials

GoogleCredentials credential = GoogleCredentials.fromStream(new FileInputStream("sa.json"))
                .createScoped(List.of(DriveScopes.DRIVE))
                .createDelegated("foo@bar.com");

但是我似乎无法弄清楚如何使用这个新的 GoogleCredentials 对象来初始化驱动器服务。传递它代替凭证对象会导致编译器错误,并且所有官方 google 驱动器 java 文档都引用现在已弃用的方法。

谁能告诉我如何使用新的凭据对象初始化 google 驱动器?

我使用的版本:

    <dependency>
      <groupId>com.google.api-client</groupId>
      <artifactId>google-api-client</artifactId>
      <version>1.32.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.oauth-client</groupId>
      <artifactId>google-oauth-client-jetty</artifactId>
      <version>1.32.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-drive</artifactId>
      <version>v3-rev20210919-1.32.1</version>
    </dependency>
    <dependency>
      <groupId>com.google.auth</groupId>
      <artifactId>google-auth-library-oauth2-http</artifactId>
      <version>1.2.0</version>
    </dependency>

要连接到 Google 驱动器,请使用 HttpCredentialsAdapter 建立从 GoogleCredentialsGoogleCredential 的连接。

样本:

return new Drive.Builder(GoogleNetHttpTransport.newTrustedTransport(), JSON_FACTORY, new HttpCredentialsAdapter(credential))
                .setApplicationName("my-drive-app")
                .build();