Я пытаюсь интегрировать 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-нейтрон] отсутствует в списке провайдеров или API: {провайдеры = [ultradns-ws], apis = [swift, swift-keystone]}
Это, по-видимому, распространенная проблема, однако предложения, предлагаемые в разделе устранения неполадок jClouds, не решают ее. . Есть еще одно обсуждение StackOverflow по этой проблеме, но не есть принятый ответ.
Несколько полезных моментов:
- Наш проект Java использует Ant, тогда как jClouds основан на Maven. Руководство по установке jClouds предоставляет инструкции по установке с помощью Ant, но ни один из них не работает правильно. Вместо этого я скомпилировал jClouds из исходного кода (https://github.com/jclouds/jclouds) и скопировал файлы .jar в папку на моем пути к классам. Теперь я могу получить доступ к объектам jClouds в моем коде.
- Источник jclouds по умолчанию не включает объекты OpenStack Neutron. В конце концов я нашел их в исходном коде OpenStack Labs (https://github.com/jclouds/jclouds-labs-openstack). Скомпилировано из исходников, скопирован файл openstack-Neutron-1.9.1.jar в папку classpath, теперь я могу получить доступ к объектам Neutron.
- Все интернет-источники предполагают, что это проблема пути к классам / зависимости. Я проверил, что библиотека openstack-нейтрон-1.9.1.jar доступна как в моих файлах .classpath, так и в build.xml. Нет разрешения.
Буду признателен за любые идеи или предложения!