当前位置: 首页 > 知识库问答 >
问题:

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

公冶高义
2023-03-14

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

如果我没有将JAR包含在bundle-classpath中,我将得到一个ClassNotFoundException

很明显,web-inf/lib中的所有JAR都是由同一个类加载器(即WAB的类加载器)加载的,所以我们没有获得osgi的主要好处,而osgi主要是按包类加载器的概念?

共有1个答案

熊博远
2023-03-14

将JAR放在WEB-INF/lib中是旧式的正常Java处理依赖关系的方式,而将它们放在war之外则是新式的OSGi处理依赖关系的方式。

通过将WAR的依赖项打包在WEB-INF/lib中,您将它们视为正常的jar(记住,包也是一个jar)。所以在这种情况下,您是对的,使用bundle没有多大意义。

使用wabs而不是wars的好处之一是可以摆脱可怕的100 Mb单片战争。与其将包打包在WEB-INF/lib中,不如尝试让war使用import-package:导入它需要的包,并将依赖项打包在EBA中。(如果您不记得让war导入它所需要的包,您将得到您看到的类未发现的异常,因为OSGi容器不会知道您的war需要那些包。)

 类似资料:
  • 问题内容: 我有一个JAR文件,我需要将其转换为OSGi捆绑软件。我没有JAR文件的原始源代码。 编辑: 我需要转换几个,但固定数量的jar。 问题答案: 选项1- 当期望频繁添加/更新Jars或可以从Maven存储库检索依赖项时,请使用 bnd-platform 构建OSGi捆绑包 我们使用bnd-platform(我也是作者)来管理第三方依赖项并从中创建OSGi捆绑包。您可以将其与从Maven

  • 我有一个 JAR 文件,我需要将其转换为 OSGi 捆绑包。我没有JAR文件的原始源代码。 我尝试使用来自以下方面的答案:如何从jar库创建OSGi捆绑包? 但是,它们已经过时了。 编辑:我需要转换几个罐子,但数量固定。

  • 我正在尝试转换org.pbjar。jxlayer库到OSGi捆绑包,我已经成功了,但当我尝试将其安装到Karaf容器中时,该容器声称该捆绑包缺少一个需求: 无法解析312.0:缺少要求[312.1]osgi.wiring。包裹(osgi.wiring.package=com.sun.java.swing) 我也把javax.swing捆绑导入指令,但问题仍然存在我改变了JDK的版本(1.5,1.6

  • 问题内容: 我想将Intent的Extras Bundle转换为JSONObject,以便可以将其传递给JavaScript。 有没有快速或最佳的方法来进行此转换?如果不是所有可能的捆绑包都能正常工作,那就没关系了。 问题答案: 您可以用来获取捆绑软件包含的密钥列表。然后,您可以遍历这些键,并将每个键值对添加到中: 请注意,这将需要您抓住一个。 编辑: 有人指出,以前的代码不能很好地处理和键入。如

  • 假设我正在创建一个OSGI包,它将部署在其他包的生态系统中。我正在处理的包需要一些其他包,但它们不在此生态系统中加载/导出,并且我无法控制生态系统导出什么。在这种情况下,我可以将这些bundle放入某个目录(比如'lib'),该目录成为bundle的一部分。还应该从Bundle-Classpath引用这些包,因此可以加载它们。 这是一个正确的Bundle-Classpath用例吗? 这些附加包是否