我正在尝试将 Apache jClouds 集成到 Java 项目中,以便可以访问 OpenStack API。以下代码失败:
neutronApi = ContextBuilder.newBuilder("openstack-neutron")
.credentials(USERNAME, API_KEY)
.endpoint(AUTH_URL)
.modules(modules)
.buildApi(NeutronApi.class);
带有以下错误消息:
Java.util.NoSuchElementException:键 [openstack-neutron] 不在提供程序或 api 列表中:{providers=[ultradns-ws], apis=[swift, swift-keystone]}
这显然是一个常见问题,但是jClouds 故障排除中提供的建议并不能解决它。还有另一个关于这个问题的 StackOverflow 讨论,但没有一个公认的答案。
几个有用的点:
- 我们的 Java 项目使用 Ant,而 jClouds 是基于 Maven。jClouds 安装指南提供了使用 Ant 安装的说明,但它们都不能正常工作。相反,我从源代码 ( https://github.com/jclouds/jclouds )编译 jClouds并将 .jar 文件复制到我的类路径上的文件夹中。现在我可以在我的代码中访问 jClouds 对象了。
- 默认的 jclouds 源不包括 OpenStack Neutron 对象。我最终在 OpenStack Labs 源代码 ( https://github.com/jclouds/jclouds-labs-openstack ) 中找到了这些。从源代码编译,将 openstack-neutron-1.9.1.jar 文件复制到类路径文件夹中,现在我可以访问 Neutron 对象了。
- 所有在线资源都表明这是一个类路径/依赖问题。我已经验证 openstack-neutron-1.9.1.jar 库在我的 .classpath 和 build.xml 文件中都可用。没有分辨率。
我会很感激任何想法或建议!