Apache Felix 6.0.1:init上的BundleException

时间:2018-11-11 21:43:21

标签: java osgi apache-felix

使用Apache Felix 6.0.1初始化OSGi框架时出现以下错误:

ERROR: Error parsing system bundle statement.
org.osgi.framework.BundleException: Exported package names cannot be zero length.
at org.apache.felix.framework.util.manifestparser.ManifestParser.normalizeExportClauses(ManifestParser.java:865)
at org.apache.felix.framework.util.manifestparser.ManifestParser.<init>(ManifestParser.java:217)
at org.apache.felix.framework.ExtensionManager$ExtensionManagerRevision.update(ExtensionManager.java:977)
at org.apache.felix.framework.ExtensionManager$ExtensionManagerRevision.access$000(ExtensionManager.java:885)
at org.apache.felix.framework.ExtensionManager.updateRevision(ExtensionManager.java:378)
at org.apache.felix.framework.Felix.init(Felix.java:744)
at org.apache.felix.framework.Felix.init(Felix.java:637)

我在Apache Felix 5.x上未收到此错误

除了我的可执行JAR(根本不是OSGi软件包)之外,我找不到任何具有空包名声明的JAR。

为什么会出现此错误?

更新

问题似乎与Maven Bundle插件v4.1.0的捆绑目标有关

在一个具有捆绑包装的启动JAR中,我有:

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>  
            <configuration>
                <versions>
                    <module.b.osgi.version.clean>${project.version}</module.b.osgi.version.clean>
                </versions>
            </configuration>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>cleanVersions</goal>
                    </goals>
                </execution>
            </executions>     
        </plugin>

在资源过滤设置为true的属性文件中,我有

org.osgi.framework.system.packages.extra=${module-b.packages}

module-b.packages=${module-a.packages}, \
org.mymodule.b;version="${module.b.osgi.version.clean}", \
${foo-${foo.specification.version}}

在生成的target / classes目录中,正如我期望的那样:

org.osgi.framework.system.packages.extra=${module-b.packages}

module-b.packages=${module-a.packages}, \
org.mymodule.b;version="0.14.0.SNAPSHOT",  \
${foo-${foo.specification.version}}

但是在JAR中,它突然看起来像这样:

org.osgi.framework.system.packages.extra=${module-b.packages}

module-b.packages=${module-a.packages}, \
org.mymodule.b;version="0.14.0.SNAPSHOT", \

不知何故${foo-${foo.specification.version}}被剥夺为空字符串!

更新2

在启动代码中发生这种情况时,我目前的解决方法是将包装类型改回jar。 OSGi干净版本仍会被替换,但Manifest文件不再包含任何OSGi条目。

1 个答案:

答案 0 :(得分:1)

我认为这是Maven Bundle插件中的回归错误。

我在这里提出了一个问题:https://issues.apache.org/jira/browse/FELIX-5980