Apache Felix 6.0.1:初始化时出现BundleException



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之外,我找不到任何有空包名称声明的JAR,它根本不是OSGi捆绑包。

为什么会出现此错误?

更新

问题似乎与Maven捆绑包插件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条目。

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

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

最新更新