在WAB(OSGI)中将jar转换为bundle有什么用?

时间:2014-03-21 20:14:17

标签: osgi classloader osgi-bundle manifest.mf wab

在探索OSGi框架之后,我开发了一个示例Web应用程序.Web Application Bundle(.war或.jar)打包在eba中。 war文件在WEB-INF/lib中包含一堆嵌入式jar文件 目录。这些罐子已根据罐子之间的关系转换为OSGi包(using maven-bundle-plugin)和所需的导出和导入包。 现在我甚至要在bundle-classpath中提到所有这些jar (WEB-INF/lib)。 上面的工作原理是因为bundle(wab也是一个bundle)可以在其中包含一个或多个jar文件,并使用Bundle-Classpath manifest.mf条目指向它们。

Incase我没有在bundle-classpath中包含jar我得到ClassNotFoundException

问题是,然后没有必要将jar转换为osgi bundle。显然,WEB-INF/lib中的所有jar都是由同一个类加载器(即wab的类加载器)加载的,所以我们没有收获OSGi的主要好处主要是每捆绑类加载器概念?

1 个答案:

答案 0 :(得分:1)

将jar放入WEB-INF / lib中是处理依赖关系的旧式普通java方法,将它们置于战争之外是新式OSGi处理它们的方式。

通过将war的依赖包装在WEB-INF / lib中,你将它们视为普通的jar(记住bundle也是一个jar)。所以在这种情况下,你使用捆绑包没有多大意义。

使用wabs而不是战争的好处之一是摆脱可怕的100 Mb整体战争。而不是将包打包在WEB-INF / lib中,尝试让war使用Import-Package:导入所需的包,并将依赖包打包到eba中。 (如果你不记得让战争导入它需要的包,你会得到你看到的类找不到的异常,因为OSGi容器不知道你的战争需要那些包。)