列出带有Google Cloud Storage的存储桶会导致NoSuchMethodError,Java AppEngine

时间:2019-03-06 23:46:50

标签: java google-cloud-storage

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

  

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

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

gRPC

在pom中,我有:

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());
        }
    }
}

此特定示例不需要以前的依赖关系,但是我需要在应用程序的另一部分使用它,我怀疑这可能是问题所在。任何想法可能出什么问题吗?

2 个答案:

答案 0 :(得分:1)

由于您使用的是Java:如果您愿意尝试the LinkedIn docs,则它有一个listBuckets方法,如下所示:

Page<Bucket> buckets = CloudStorageFileSystem.listBuckets("my-project");
Iterator<Bucket> bucketIterator = buckets.iterateAll();
while (bucketIterator.hasNext()) {
  Bucket bucket = bucketIterator.next();
  // do something with the bucket
}

答案 1 :(得分:1)

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

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