首页 > 解决方案 > 使用 Google Cloud Storage 列出导致 NoSuchMethodError、Java AppEngine 的存储桶

问题描述

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

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>

这个特定示例不需要前一个依赖项,但我需要它用于应用程序的另一部分,我怀疑这可能是问题所在。有什么想法可能会出错吗?

标签: javagoogle-cloud-storage

解决方案


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

Eclipse 中的解决方案是删除所有相关的 Google 库,然后通过右键单击项目 > 构建路径 > 配置构建路径... > 添加库... > Google Cloud Platform Libraries > 选择“App Engine API”再次添加它们& “云储存”。


推荐阅读