【问题标题】:Apache Felix 6.0.1: BundleException on initApache Felix 6.0.1:初始化时出现 BundleException
【发布时间】:2019-04-14 15:58:12
【问题描述】:

使用 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 Plugin 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}}

在生成的目标/类目录中,我有预期:

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 条目。

【问题讨论】:

    标签: java osgi apache-felix


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多