在研究了OSGi框架之后,我开发了一个示例web application.The Web应用程序包(.war或.jar)。war文件在其WEB-INF/lib directory.These jar中包含了一堆嵌入的jar文件,jar已被转换为OSGi bundle(using maven-bundle-plugin),并按照jar之间的关系将所需的导出和导入包转换为jar。现在,我必须提到包类路径中的所有这些jars、(WEB-INF/lib)。上面的工作是因为一个包(wab也是一个包)可以在其中包含一个或多个jarfile,并使用Bundle-Classpath manifest.mf条目来指向它们。
如果我不包括包类路径中的jars,我会得到一个ClassNotFoundException。
问题是,将jars转换为osgi bundles.Obviously没有意义-- WEB-INF/lib中的所有jars都是由同一个类加载器(即wab的类加载器)加载的,所以我们没有获得OSGi的主要好处--这主要是每个包类加载器的概念?
发布于 2014-03-22 07:22:40
将war放入WEB/lib是处理依赖关系的旧风格的普通java方式,而将它们放到war之外是处理依赖关系的新的OSGi方式。
通过将war的依赖项打包到WEB/lib中,您将它们视为普通jar(请记住,包也是一个jar)。因此,在这种情况下,您是对的,使用包没有多大意义。
使用wabs而不是战争的好处之一是摆脱可怕的100 Mb单块战争。与其将包打包到WEB/lib中,不如让war导入它需要的包,使用import:,并将依赖项打包到eba中。(如果您不记得war导入了它所需要的包,那么您将得到类未发现的异常,因为OSGi容器将不知道war需要这些包。)
https://stackoverflow.com/questions/22568657
复制相似问题