簡體   English   中英

Karaf是否支持從Maven Central下載傳遞依賴項?

[英]Does Karaf support downloading of transitive dependencies from maven central?

我正在嘗試使用Karaf,我想知道是否可以對其進行配置以從Apache Maven Central存儲庫中提取可傳遞的依賴項。 無需使用“嵌入式捆綁包”

我已經知道您可以拉出顯式依賴關系,問題的關鍵部分是“傳遞性”依賴關系。

我還知道您可以使用OBR從已部署的站點中的repository.xml文件中進行讀取,但是找不到用於Maven Central的文件。 這個問題的可能答案是添加URL,但在任何repository.xml URL所在的地方都找不到文檔。

目前,我的解決方法是找出依賴項是什么並將其顯式添加到

嵌入式捆綁軟件不適用於Karaf OSGi藍圖實現(它只是在等待不存在的東西)。 我也覺得必須這樣做。 另一種可能的答案,我可以為這個問題想的是,如果有提示創建一個包含所有必要的依賴,可以部署到任何 OSGi容器(不只是Karaf使用KAR文件)封裝。

您可以使用karaf-maven-plugin從maven依賴項創建功能部件文件。 這將解決傳遞依賴性。

我找到了一種使用Maven以相對OSGi標准方式執行此操作的方法。 它使用maven-dependency-plugin創建一個僅包含運行時范圍所需的依賴項的存儲庫。

然后執行maven-bundle-plugin:index目標以創建repository.xml文件。

此時,在目標中您具有有效的obr存儲庫,可以根據需要使用maven-assembly-plugin對其進行打包。

以下pom.xml代碼片段將執行所需的操作。

        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>copy-runtime-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <copyPom>true</copyPom>
                        <useRepositoryLayout>true</useRepositoryLayout>
                        <includeScope>runtime</includeScope>
                    </configuration>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <executions>
                <execution>
                    <id>index</id>
                    <goals>
                        <goal>index</goal>
                    </goals>
                    <phase>verify</phase>
                    <configuration>
                        <mavenRepository>${project.build.directory}/dependency</mavenRepository>
                    </configuration>
                </execution>
            </executions>
        </plugin>

對於Karaf,無需使用Karaf的feature.xml,可以使用以下命令安裝此捆綁包及其傳遞依賴項:

features:install obr
obr:addUrl [location of the OBR repository, can be file:///....]
obr:deploy [symbolicname-of-bundle]
start [symbolicname-of-bundle]

和瞧。

請注意,這只會加載您指定的包所引用的包,因此,如果您使用的是Blueprint之類的產品,那么從理論上講它不應該了解其他包,則必須顯式部署它們或創建一個超級捆綁包,其中將包含您擁有的捆綁包(例如功能/產品)

據我所知,最好的辦法是使用Maven下載所有依賴項,然后使用Felix bnd插件將本地(或遠程)存儲庫轉換為可與Karaf一起使用的OBR。

暫無
暫無

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

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