要了解的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會爲你準備一個捆綁包。