链接: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