Apache Karaf是一個強大的OSGi容器。它爲發佈OSGi應用程序提供了支持。java
一個OSGi程序是由一系列OSGi bundles組成的。OSGi bundle 是一個在MANIFEST中帶有附加元數據的jar文件。apache
在OSGi中,一個bundle能夠依賴於其它的bundles。所以,大部分狀況下,在部署一個OSGi應用程序以前,你須要先把這個應用程序須要的其它bundles部署上。緩存
Apache Karaf爲咱們提供了一種簡單、靈活的方式來配置和發佈OSGi應用程序。在Karaf中,使用Apache Karaf feature來實現這種配置。ide
Feature的定義:模塊化
a namea versiona optional description (eventually with a long description)a set of bundlesoptionally a set configurations or configuration filesoptionally a set of dependency featuresspa
當你install一個feature的時候,karaf 會install feature中所定義的所有的資源。它會自動地解析和install全部定義的bundles、配置文件以及它所依賴的其它的features(feature中還能夠定義features)。設計
Features經過它自定義的XML標籤來描述ip
安裝好的features會保存在karaf的緩存(cache:在data目錄下)中,這樣你以前安的features資源在你重啓karaf以後仍然會保留。若是你執行了clean並重啓karaf或者刪除了karaf cache,全部以前安的features資源就會丟失,你就須要再手動安裝一遍。爲了防止出現這種狀況,你能夠制定features爲boot類型的。ssl
什麼是boot features?一個boot feature會被karaf自動安裝,即便它沒有提早使用feature:install安裝。這個配置在etc/org.apache.karaf.features.cfg文件中,文件中有兩個屬性被用來定義boot features。資源
http://baijiahao.baidu.com/s?id=1600246970563166864&wfr=spider&for=pc
Java模塊化系統OSGi
https://www.tianmaying.com/tutorial/osgi-kickstart
OSGi中Bundle間的耦合:Export/Import Package與服務
OSGI經過不一樣的classloader來加載不一樣的bundle,達到隔離bundle的目的,咱們也提到經過Import/Export Package的方式來控制bundle之間「有限地」訪問對方的類。
在OSGI裏,bundle暴露本身的類(Export)或引用其餘bundle的類(Import)的單位是package(就是每一個java代碼文件最上頭定義的Package),也就是對於bundle來講,只能將整個package裏的類暴露或引用進來,而不是對單個類做暴露或引用,因此,咱們在設計時,應考慮將需暴露出去的類放在一個或幾個package裏,而將需隱藏起來的類放在其餘的package裏。