你能在不同的OSGi包中使用JSF自定义组件吗?

有没有人一起使用OSGi和JSF?

我问,因为JSF使用类加载器魔术来查找自定义组件。 从教程(强调我的):

此配置文件最终将成为表示此组件的.jar文件中的META-INF / faces-config.xml。 JSF将在运行时加载的每个.jar文件中查找这样的文件名 (在.war文件的WEB-INF / lib目录中),并在其配置中使用它们。 通过这种方式,可以将多个组件.jar文件组合到一个Web应用程序中,并且每个.jar中描述的所有组件都可供应用程序使用。

我希望能够将JSF自定义组件作为OSGi包(即自定义组件与JSF运行时不同的OSGi包)以及JSF能够在运行时找到它们。

有没有人做过类似的事情?

可以通过以下方式实现:

  • 您的web osgi包必须在MANIFEST.MF中指向包含组件的包的“Require-Bundle”
  • 你的组件jar必须有包含META-INF的Export-Package和META-INF的子包,其中有任何JSF相关文件(当然还有组件的标准包)。 例如:Export-Package:META-INF,META-INF.resources ……

如果使用maven-bundle插件,则必须使用撇号和等号来导出META-INF和子包。 例如:

 abc, '=META-INF', '=META-INF.resources', ...  

在JSF Spec 2.2中,可能存在关于JSF-OSGI关系的部分内容。 要查看进度,请参阅http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-942

我不确定它是否能解决您的问题,但我发现了关于Spring和osgi interresting的这个post,特别是这个特定的答案 ,其中依赖项和类路径被捆绑在MANIFEST.MF中。

该线程还导致对OSGi™服务平台的Spring Dynamic Modules(DM)教程的更新,这也可能是有意义的。