我正在尝试使用Karaf,我想知道是否可以将其配置为从Apache Maven Central存储库中提取传递依赖项。无需使用“嵌入式捆绑包”
我已经知道你可以提取明确的依赖关系,问题的关键部分是“传递性的”。
我也知道你可以使用OBR从已部署站点中的repository.xml文件中读取,但我找不到Maven central的文件。问题的一个可能答案是添加URL,但我无法在repository.xml URL的任何位置找到它。
目前,我的工作是弄清楚依赖关系是什么,并明确地将它们添加到
嵌入式捆绑包不适用于Karaf OSGi蓝图实现(它只是等待不存在的东西)。我也觉得必须这样做很难看。我能想到的另一个可能的答案是,是否有创建可以部署到任何 OSGi容器(不仅仅是使用KAR文件的Karaf)的包的说明,其中包含所有必需的依赖项。< / p>
答案 0 :(得分:3)
您可以使用karaf-maven-plugin从maven依赖项创建功能文件。这将解决传递依赖性。
答案 1 :(得分:2)
我找到了一种使用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]
瞧。
请注意,这只会加载您指定的bundle引用的bundle,所以如果您使用的是Blueprint,理论上它不应该知道其他bundle,那么你必须明确部署它们或创建一个包含您拥有的捆绑包的超级捆绑包(如功能/产品)
答案 2 :(得分:1)
据我所知,您可以做的最好的事情是使用Maven下载所有依赖项,然后使用Felix bnd plugin将本地(或远程)存储库转换为可与Karaf一起使用的OBR