首页 文章

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

提问于
浏览
1

在探索OSGi框架之后,我开发了一个示例Web应用程序.Web Application Bundle(.war或.jar)打包在eba中 . war文件在其 WEB-INF/lib 目录中包含一堆嵌入式jar文件 . 这些jar已根据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 回答

  • 1

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

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

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

相关问题