簡體   English   中英

具有多個提供商的Jclouds

[英]Jclouds with multiple providers

我正在嘗試以一種可以同時與多個提供程序一起使用的方式在應用程序中使用Jclouds。 具體來說,我正在嘗試使用“ openstack-nova”提供程序和“ rackspace-cloudservers-us”提供程序,以便可以在運行時在兩個不同的雲中提供節點。 但是,提供者似乎在互相踩踏。 當我在Maven構建中同時包含兩個依賴項時,Rackspace提供程序是提供程序列表中唯一可用的一個:

  <dependency>
    <groupId>org.apache.jclouds.provider</groupId>
    <artifactId>rackspace-cloudservers-us</artifactId>
    <version>1.7.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.jclouds.api</groupId>
    <artifactId>openstack-nova</artifactId>
    <version>1.7.0</version>
  </dependency>

注釋掉Rackspace提供程序依賴項將使openstack-nova可以正常工作。 請問有沒有辦法有Jclouds多個供應商在同一時間

那應該工作得很好。 您應該能夠通過將“ rackspace-cloudservers-us”傳遞給ContextBuilder或“ openstack-nova”來創建上下文(實際上,openstack-nova是機架空間提供程序的可傳遞依賴項,因此即使在類路徑中也可以使用它)如果您未明確聲明它)。 您有什么具體問題?

我想通了,但忘了問了這個問題。 這是發生了什么事。

jClouds提供程序向Java ServiceLoader注冊自己。 這意味着META-INF/services目錄中有一個小文件,該文件具有jClouds核心在運行時注入的提供程序類名。 我使用Shade制作了一個胖JAR,這意味着該文件的內容在最終的JAR中被覆蓋。

這樣就留下了一個條目,而不是兩個條目,因此在運行時jClouds找不到另一個提供程序。 我必須添加一個配置選項,以確保Shade不會踩踏此文件。 這是我已經為Spring做的事情,所以一旦我意識到jClouds在做什么,那是一個非常簡單的修復。

對於好奇的人,這是我的插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
        <configuration>
          <createDependencyReducedPom>false</createDependencyReducedPom>
          <transformers>
            <!--Need to do this to make sure spring schemas dont stomp on each other-->
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/spring.handlers</resource>
            </transformer>
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/spring.schemas</resource>
            </transformer>
            <!-- Need to make sure jClouds providers play nicely -->
            <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
              <resource>META-INF/services/org.jclouds.apis.ApiMetadata</resource>
            </transformer>
            <!--Executable JAR-ify this-->
            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
              <mainClass>com.example.Main</mainClass>
            </transformer>
          </transformers>
        </configuration>
      </execution>
    </executions>
  </plugin>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM