【发布时间】:2011-09-27 08:01:28
【问题描述】:
我最近编写了一种小型专业脚本语言,并使用 Maven 导出了符合 OSGi 的捆绑包,该捆绑包还将服务描述符导出到“META-INF/services/javax.script.ScriptEngineFactory”服务注册表文件中。
问题在于,尽管 OSGi 导入和导出包都很好,但服务注册表似乎与 OSGi 不兼容(因为 OSGi 将其捆绑包远离通用类路径并为模块使用单独的类加载器)。
我的问题是,我认为 OSGi 与服务发现机制不兼容是否正确,如果不是,我可以在我的包元数据中添加什么,以便ScriptEngineManager.getEngineFactories() 将我的脚本引擎列出在 OSGi 环境中?
【问题讨论】:
-
另一个 JSR-223 和 OSGi 不匹配是在运行时脚本通常需要导入类。但是,OSGi 更喜欢 bundle 在构建时通过在 bundle 的 JAR META-INF/MANIFEST.MF 中声明导入来指定导入。带有通配符的 DynamicImports-Package 指令可以以淡化 OSGi 的 JAR 版本管理为代价来解决这个问题。