Felix:无法在JDK 9上添加扩展束

时间:2018-06-22 16:04:58

标签: osgi java-9 apache-felix osgi-fragment

在迁移到JDK 9+之后,我们围绕apache Felix构建的OSGi容器开始无法安装扩展包。错误消息是:

Caused by: org.osgi.framework.BundleException: Could not create bundle object.
    at org.apache.felix.framework.Felix.installBundle(Felix.java:3095)
    ...
Caused by: java.lang.UnsupportedOperationException: Unable to add extension bundle.
    at org.apache.felix.framework.ExtensionManager.addExtensionBundle(ExtensionManager.java:439)
    at org.apache.felix.framework.Felix.installBundle(Felix.java:3061)
    ...

我们的Felix版本是5.6.10,当前是最新版本。捆绑包清单的相关部分:

Created-By: Apache Maven Bundle Plugin
Fragment-Host: system.bundle; extension:=framework
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=9.0))"
Tool: Bnd-3.5.0.201709291849

1 个答案:

答案 0 :(得分:1)

调试显示,用于安装扩展的类加载器已移至JDK 9中的命名模块。因此,必须为所有未命名模块打开类加载器的包,以便可以从Felix框架访问它。

在添加以下命令行选项后,它可以工作:

--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED

对于使用maven-surefire-plugin的单元测试,请使用:

 <configuration>
     <argLine>
         --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED
     </argLine>
 </configuration>

该解决方案似乎是从Felix的ExtensionManager登录的,但未添加到异常消息中,因此在我自己的日志中找不到该消息:

        m_logger.log(bundle, Logger.LOG_WARNING,
            "Unable to add extension bundle - Maybe ClassLoader is not supported " +
                    "(on java9, try --add-opens=java.base/jdk.internal.loader=ALL-UNNAMED)?");