使用Google云存储列出bucket,导致NoSuchMethodError,Java AppEngine

使用Google云存储列出bucket,导致NoSuchMethodError,Java AppEngine,java,google-cloud-storage,Java,Google Cloud Storage,试图列出我的Google云存储项目中的存储桶,但不太明白为什么我会不断出现以下错误: java.lang.NoSuchMethodError: com.google.api.services.storage.model.Bucket.getIamConfiguration()Lcom/google/api/services/storage/model/Bucket$IamConfiguration 我正在使用以下servlet对其进行测试: package servlets; import j

试图列出我的Google云存储项目中的存储桶,但不太明白为什么我会不断出现以下错误:

java.lang.NoSuchMethodError: com.google.api.services.storage.model.Bucket.getIamConfiguration()Lcom/google/api/services/storage/model/Bucket$IamConfiguration

我正在使用以下servlet对其进行测试:

package servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

@WebServlet("/Test")
public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Test() {
        super();
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Storage storage = StorageOptions.getDefaultInstance().getService();
        for (Bucket bucket : storage.list().iterateAll()) { //this line is giving the error
            response.getWriter().write(bucket.getName());
        }
    }
}
在我的pom中,我有:

<dependency>
    <groupId>com.google.appengine.tools</groupId>
    <artifactId>appengine-gcs-client</artifactId>
    <version>0.8</version>
</dependency>

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-storage</artifactId>
    <version>1.64.0</version>
</dependency>

com.google.appengine.tools
appengine gcs客户端
0.8
com.google.cloud
谷歌云存储
1.64.0

对于这个特定的示例,前一个依赖项不是必需的,但我需要它用于应用程序的另一部分,我怀疑这可能就是问题所在。你知道会出什么问题吗

因为您使用的是Java:如果您愿意尝试,它有一个
ListBucket
方法,如下所示:

Page bucket=CloudStorageFileSystem.listbakes(“我的项目”);
迭代器bucketIterator=buckets.iterateAll();
while(bucketIterator.hasNext()){
Bucket=bucketIterator.next();
//用这个桶做点什么
}

找到了问题。我得到了一个NoSuchMethodError,因为显然项目中没有包含所需的库,即使它被指定为maven依赖项。开发服务器上的库和生产服务器上的库之间存在某种不匹配


Eclipse中的解决方案是删除所有相关的Google库,然后右键单击项目>构建路径>配置构建路径…>添加库…>谷歌云平台库>选择“应用程序引擎API”和“云存储”。

我在一个简单的示例中尝试了你的代码,一切都很顺利。你能自己试试看,看你是否也会犯同样的错误吗?这将指向丢失访问云存储的某些权限的方向。你能详细说明一下这段代码在哪里运行,以及它是否由具有相应权限的用户或服务帐户运行吗?哇,太酷了!今天晚些时候我会试一试,让你知道发生了什么。谢谢