如何以编程方式从Karaf Feature中排除包

时间:2018-12-02 04:34:23

标签: osgi apache-karaf osgi-bundle karaf karaf-maven-plugin

在我的项目中,有一个Karaf功能XML文件,其中包含所有OSGi捆绑软件。现在,它在其他Maven项目的pom.xml文件中用作依赖项

<dependency>
  <groupId>a.b.c</groupId>
  <artifactId>dummyfeature</artifactId>
  <type>xml</type>
  <classifier>features</classifier>
  <version>1.0.0</version>
</dependency>

现在,以下代码正在用于安装上述功能。

KarafDistributionOption.features(
                 maven()
                .groupId("a.b.c")
                .artifactId("dummyfeature")
                .version("1.0.0")
                .type("xml")
                .classifier("features"), "dummyfeature")

是否可以通过编程方式从上述功能中排除特定的OSGi包?

1 个答案:

答案 0 :(得分:1)

NoSuchElementException提供了一种更改从XML文件读取的功能的方法。您可以:

  • 将某些捆绑商品列入黑名单
  • 将某些功能列入黑名单
  • 覆盖某些捆绑包(例如更改版本甚至组/工件ID)
  • 覆盖全部功能

有关机制的概述,请参见Using implicit wait in selenium。还没有文档片段(我没有时间做)。但是对于您的特定情况,您应该添加etc/org.apache.karaf.features.xml文件,并包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Configuration generated by Karaf Assembly Builder
-->
<featuresProcessing xmlns="http://karaf.apache.org/xmlns/features-processing/v1.0.0">
    <blacklistedBundles>
        <!-- there are several patterns you can use here -->
        <bundle>mvn:groupId/artifactId</bundle>
        <bundle>mvn:groupId/artifactId/1.0</bundle>
        <bundle>mvn:groupId/artifactId/[1,2)</bundle>
    </blacklistedBundles>
</featuresProcessing>