要了解的Apache Karaf,你应该先了解OSGi的。
Java应用程序以Jar文件的形式部署为它们的工件。如果应用程序依赖于其他jar文件,那么这些jar必须存在于应用程序的类路径中。当应用程序运行时,所需的类将根据需要加载并实例化。
如果您的应用程序部署在任何容器(例如:像tomcat这样的web服务器)内,那么容器遵循一些标准逻辑来加载或初始化您的应用程序。这涉及到加载类。要求程序中引用的类必须存在于应用程序的类路径中(例如:war文件的web-inf目录)。 如果容器在战争中找不到所需的类,它会查询应用程序的父类加载器来查找类文件。 因此,这种方式使用普通的Java运行时处理多个分层类加载器。 这有一个问题,即根据部署的应用程序,多次加载同一个类。
欢迎来到OSGi。 在OSGi中,jar将被称为Bundle。 一个包看起来很像一个jar,但在其manifest.mf文件中有额外的头文件。 标题提供了有关哪些软件包由软件包导出/导入的信息。 当您的应用程序想要使用任何库jar文件时,您会在manidest的Import-package头文件中提到所需的软件包。当其他软件包想要使用bundles中的软件包时,必须使用Export-package标头公开软件包。
OSGi运行时查找这样的头并有效地处理类加载。所以,一个类只会使用它的jar的类加载器加载一次,并且您将从恼人的ClassNotFoundExceptions中解救出来。
OSGi是规范。它有一个可以在manifest.mf中使用的头部列表。期。
Apache Felix和Eclipse equinox是这个规范实现的一小部分。
Apache卡拉夫是一个控制台。控制台有助于与任何应用程序进行交互。在这里,应用程序是Apache Felix的OSGi运行时。 Karaf提供了很多与OSGi交互的命令。您可以使用其热部署功能在运行时将新捆绑包部署到OSGi(无需重新启动Karaf)。只需将包文件放入deploy文件夹即可完成。
随着卡拉夫,你可以看到服务,包通过任何捆绑暴露。 Karaf提供了很多开箱即用的框架,比如spring,jetty server,logging utilities。
随着卡拉夫你可以启动,在运行时停止任何捆绑。总之,Karaf只是OSGi运行时的控制台。
你可以编写任何普通的java程序并使用OSGi。你只需要用bundle激活器来连接你的应用程序初始化逻辑。
Apache maven是一个构建工具。有了这个,你可以构建(准备jar工件)任何Java项目。
在使用OSGi时,您需要遵守manifest.mf语义。应根据需要导出和导入包。为了帮助构建适当的manifest.mf,有一个'bnd'工具。这个工具分析你的应用程序的类路径,并准备最终的OSGi包与适当的清单。
Apache Maven利用这个'bnd'工具和它的maven-bundle-plugin。 只需将此插件附加到项目的生命周期目标,即可完成。 Maven会为你准备一个捆绑包。