在对Apache进行了大量搜索之后,我了解到它被用于测试和构建OSGI包,我还没有弄清楚如何处理Apache,以及如何使用它--我也不太了解OSGI包的需求。
此外,我亦想知道以下疑问的答案:
发布于 2015-03-19 07:31:23
发布于 2015-06-01 18:42:04
要理解Apache,首先应该了解OSGi。
Java应用程序以Jar文件的形式部署,作为它们的工件。如果应用程序依赖于其他jar文件,那么这些jar必须存在于应用程序的类路径中。当应用程序运行时,将根据需要加载和实例化所需的类。
如果您的应用程序部署在任何容器中(例如:像tomcat这样的web服务器),那么容器将遵循一些标准逻辑来加载或初始化应用程序。这涉及到加载类。程序中引用的类必须出现在应用程序的类路径上(例如: war文件的web-inf目录)。如果容器在war中找不到所需的类,它会咨询应用程序的父类加载器来定位类文件。因此,这样,在处理正常的java运行时,就会出现多个层次化的类加载器。这就存在一个问题,即根据部署的应用程序,同一个类被加载了多次。
欢迎来到OSGi。在OSGi中,一个jar将被称为Bundle。一个包看起来类似于一个jar,但是它的manifest.mf文件中有额外的头。标头提供了关于包导出/导入的包的信息。当您的应用程序想要使用任何库jar文件时,您必须在manidest的Import header.When中提到所需的包-任何其他包都想使用bundl中的包,您必须使用Export报头公开这个包。
OSGi运行时查找此类标头并有效地处理类加载。因此,类只使用jar的类加载器加载一次,您将从恼人的ClassNotFoundExceptions中获救。
OSGi是规范。它有一个可以在manifest.mf中使用的标题列表。句号。
Apache和Eclipse是该规范的少数实现。
Apache是一个控制台。控制台有助于与任何应用程序交互。在这里,应用程序是OSGi运行时,它是Apache。Karaf提供了许多与OSGi交互的命令。您可以在运行时将新的包部署到OSGi (不需要重新启动Karaf),使用它的热部署特性。只要将包文件放在deploy文件夹中,您就完成了。
使用Karaf,您可以看到服务,由任何包公开的包。Karaf提供了许多开箱即用的框架,如spring、jetty服务器、日志工具。
使用Karaf,您可以启动,在运行时停止任何包。
因此,最后,Karaf只是一个用于OSGi运行时的控制台。
您可以编写任何普通的java程序并使用OSGi。您只需将应用程序初始化逻辑与bundle激活程序连接起来即可。
Apache是一个构建工具。有了这个,您可以构建(准备jar工件)任何java项目。
在使用OSGi时,您需要坚持使用manifest.mf系统。包装应按要求出口和进口。为了帮助构建适当的manifest.mf,有一个'bnd‘工具。此工具分析应用程序的类路径,并使用适当的清单准备最终的OSGi包。
Apache利用这个'bnd‘工具和它的maven -bundle插件。只要把这个插件附加到项目的生命周期目标上,你就完成了。Maven会为你准备一个包裹。
https://stackoverflow.com/questions/29136950
复制相似问题