基本規則:每一個Plugin都有自己獨立的ClassLoader,因此也有獨立的classpath。這個Classpath按順序由如下的幾個部分組成:
1. The OSGi parent class loader。所有在OSGi中的的class loader均有一個公共的parent class loader。在缺省時,這就是java boot class loader。boot loader通常只知道rt.jar,但是這個boot classpath可以通過java命令來添加。
2. 所有imported plugin的exported libaries。、
3. plugin及其fragments所聲明的libraries。
由上可知,要添加一個Jar到一個plug-in的classpath,可以有如下的幾種辦法:
1. 添加到boot classpath,雖然這樣做很簡單,但通常這并不是一個好辦法,它會影響到所有安裝的plugin。
2. 可以將Jar添加到這個plugin的declared libraries中。這是可行的,如果其它的plugin并不使用到這個Jar的話。
3. 創建一個新的plugin來wrap這個library。在將這個plugin添加到requried plugin中去。這種是官方推薦的方法。缺點是會對特定版本的插件形成依賴。
4. OSGi的parent loadre可以通過osgi.parentClassloader系統變量來改變,并由此改變classpath。通常這也不是一個好的辦法。