Karaf是否支持从 maven 中心下载传递依赖项



我正在尝试使用 Karaf,我想知道是否可以将其配置为从 Apache Maven Central 存储库中提取传递依赖项。 无需使用"嵌入式捆绑包"

我已经知道你可以拉出显式依赖关系,问题的关键部分是"传递"依赖关系。

我也知道您可以使用 OBR 从已部署站点中的存储库.xml文件读取,但我找不到 Maven 中心的文件。 这个问题的一个可能的答案是添加 URL,但我在任何地方都找不到它记录了存储库.xml URL 是什么。

目前,我的解决方法是弄清楚依赖项是什么并将它们显式添加到

嵌入式捆绑包不适用于 Karaf OSGi 蓝图实现(它只是等待不存在的东西)。 我也觉得不得不这样做很丑陋。 对于这个问题,我能想到的另一个可能的答案是,是否有说明来创建可以部署到包含所有必要依赖项的任何OSGi容器(不仅仅是使用KAR文件的Karaf)的包。

您可以使用 karaf-maven-plugin 从 maven 依赖项创建功能文件。这将解决传递依赖关系。

我找到了一种使用Maven以相对OSGi标准的方式执行此操作的方法。 它使用 maven-dependency-plugin 创建一个仅包含运行时作用域所需的依赖项的存储库。

然后执行 maven-bundle-plugin:index 目标来创建存储库.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 功能的情况下安装这个捆绑包及其传递依赖项.xml:

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

瞧。

请注意,这只会加载您指定的捆绑包所引用的捆绑包,因此,如果您使用的是蓝图之类的东西,理论上它不应该知道其他捆绑包,那么您必须显式部署它们或创建一个包含您拥有的捆绑包的 uber 捆绑包(如功能/产品)

据我所知,你能做的最好的事情就是使用 Maven 下载所有依赖项,然后使用 Felix bnd 插件将您的本地(或远程)存储库转换为可以与 Karaf 一起使用的 OBR。

最新更新