基本规则:每一个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。通常这也不是一个好的办法。