【问题标题】:Felix: unable to add extension bundle on JDK 9Felix:无法在 JDK 9 上添加扩展包
【发布时间】:2018-06-22 16:04:58
【问题描述】:

迁移到 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

【问题讨论】:

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


    【解决方案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)?");
    

    【讨论】:

    • Felix 代码似乎正在侵入应用程序类加载器定义的非公共 appendToClassPathForInstrumentation 方法。该方法供 java.instrument 代理的实现使用,决不应该由 JDK 之外的代码直接使用。希望有一个错误提交给菲利克斯。
    • @AlanBateman Felix 项目确实意识到了这个问题并正在解决这个问题。
    • @NeilBartlett 有我们可以关注的 Jira 问题吗?
    • @NeilBartlett FELIX-5727 已针对我们正在使用的版本 5.6.10 进行了修复。这是否意味着使用“add-opens”的解决方法是永久性的?
    • @gjoranv 是的,我认为这意味着在 Java 9+ 上运行时支持 OSGi 框架扩展包可能总是需要add-opens。我一直认为框架扩展是规范的一个 hacky 部分,并鼓励人们寻找替代解决方案。
    猜你喜欢
    • 2010-10-21
    • 2020-06-23
    • 2016-01-15
    • 2016-04-18
    • 2020-07-08
    • 2022-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多