将WAB(OSGI)中的罐子转换成捆绑包有什么用?
在探索OSGi框架之后,我开发了一个示例Web应用程序。Web应用程序包(.war或.jar)打包在eba中。 war文件在其WEB-INF/lib
目录中包含一堆嵌入式jar文件。根据jar之间的关系,这些jar已被转换为OSGi bundle (using maven-bundle-plugin
)以及所需的导出和导入包。 现在我不得不在bundle-classpath中提及所有这些jar (WEB-INF/lib)
。 上面的工作是因为bundle(wab也是一个bundle)可以包含一个或多个jar文件,并使用Bundle-Classpath manifest.mf条目指向它们。
Incase我不包括捆绑类路径中的jar我得到一个ClassNotFoundException
。
问题是,那么将jar转换为osgi bundle没有意义。显然, WEB-INF/lib
中的所有jar都是由同一个类加载器(即wab的类加载器)加载的,所以我们没有获得主要的好处。 OSGi主要是每捆类加载器的概念?
将JAR放入WEB-INF / lib是旧式的正常java处理依赖关系的方式,将它们放在战争之外是新式OSGi处理它们的方式。
通过将你的战争的依赖包装在WEB-INF / lib中,你将它们当作普通的罐子(记住一个捆绑也是一个罐子)。 所以在这种情况下,你说得对,使用捆绑包没什么意义。
使用wabs而不是战争的好处之一是摆脱可怕的100 Mb单片战争。 不要在WEB-INF / lib中打包,而应该使用Import-Package:来导入所需的包,然后将依赖关系打包到eba中。 (如果你不记得战争导入了它需要的包,那么你将看到这个类没有发现你所看到的异常,因为OSGi容器不会知道你的战争需要这些包。)
链接地址: http://www.djcxy.com/p/12963.html上一篇: What is the use of converting jars to bundles in WAB(OSGI)?
下一篇: how to package and use custom taglib (maven jar project)