创建 JClouds SwiftApi 时出错:无法实例化提供程序 org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata

Posted

技术标签:

【中文标题】创建 JClouds SwiftApi 时出错:无法实例化提供程序 org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata【英文标题】:Error creating JClouds SwiftApi: Provider org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata could not be instantiated 【发布时间】:2014-09-27 02:16:51 【问题描述】:

我有一些用于连接 JClouds swift 存储容器的代码,该容器在其自己的测试区域中运行良好,但是一旦我集成到我的项目中,就会出现错误:

线程“主”java.util.ServiceConfigurationError 中的异常: org.jclouds.apis.ApiMetadata:提供者 org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata 不能 实例化:java.lang.IllegalStateException: java.lang.reflect.InvocationTargetException

这是在 ContextBuilder 行上失败的代码:

private SwiftApi swiftApi;

public JCloudsConnector(String username, String password, String endpoint) 
      String provider = "openstack-swift";

      Properties overrides = new Properties();
      overrides.setProperty("jclouds.mpu.parallel.degree", "" + Runtime.getRuntime().availableProcessors());

      swiftApi = ContextBuilder.newBuilder(provider)
            .endpoint(endpoint)
            .credentials(username, password)
            .overrides(overrides)
            .buildApi(SwiftApi.class);

我使用的是相同的依赖项(JClouds 版本 1.7.3),所以我无法理解问题可能是什么,因为两者都在相同的环境中运行。

【问题讨论】:

类路径中有哪个版本的 Guava?另外,您运行的是哪个版本的 JVM? Guava 在 16.0.1 和 JVM 1.7.051 Jclouds 1.7.3 依赖于 Guava 15.0,并且不适用于该 JVM 版本中的更高版本。你能坚持使用 Guava 15.0 吗? 非常感谢!现在问题已经解决了。 不要在你的问题标题中加上SOLVED,或者在问题中回答你的问题。而是发布一个单独的答案,并通过单击答案旁边的复选标记将其标记为已完成。 【参考方案1】:

感谢 Ignasi Barrera,我能够通过在我的 maven POM 文件中添加 Guava 15.0 的条目来对此进行排序:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>15.0</version>
</dependency>

【讨论】:

以上是关于创建 JClouds SwiftApi 时出错:无法实例化提供程序 org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata的主要内容,如果未能解决你的问题,请参考以下文章

使用 jclouds API 创建 aws-ec2 实例

JClouds S3:上传文件时指定内容长度

使用 Jclouds 上传时,Rackspace 云文件将“应用程序/未知”作为 mime 类型返回

Rackspace 云文件(使用 jclouds) - 如何获取容器位置

jclouds 支持较新的 vCloud API

如何通过 Clojure 使用 JClouds 和 Rackspace 启用 CDN?