Eclipse OSGI如何用Fragment的类覆盖掉Host Plugin里的类

 链接:http://blog.sina.com.cn/s/blog_7f9b8c510101d4hs.html

有这样一个需求,希望用Fragment增强现有Plugin的功能,但是Eclipse的OSGI classloader是优先加载Host Plugin的,但我又不想修改classloader。查了一下,有一个比较Tricky的方法,记录一下:

 

1.在Fragment项目中编写同名类,注意包名也必须一致。

2.修改Fragment的build configuration,新建library,如library.jar,添加src到目录中。删除掉原来的“.”这个library。添加library.jar到classpath中。

3.在Host Plugin里,修改MANIFEST.MF,添加library.jar到classpath中,注意HostPlugin不能包含library.jar.

 

注意:classpath的格式必须是library.jar,. fragment和host plugin必须都如此设置,保证library.jar中的类被优先加载。

 

以上做好后,运行plugin,可以看到fragment里的同名类已经覆盖掉Host Plugin的类了。

这样做的另外一个好处,就是可以直接将fragment打包成文件夹形式,方便修改国际化和配置文件。

 

来源:

http://wiki.eclipse.org/Steps_to_use_Fragments_to_patch_a_plug-in

http://stackoverflow.com/questions/4507411/osgi-fragments-patching-bugs-in-eclipse-plug-ins

https://bugs.eclipse.org/bugs/show_bug.cgi?id=126687

你可能感兴趣的:(Eclipse OSGI如何用Fragment的类覆盖掉Host Plugin里的类)