Eclipse Plugin Fragment使用步骤

在RCP或者IDE的开发过过程中,有时我们需要利用一些第三方开源插件项目,但又不想改动其源码(方便后续的同步升级与该项目一致),这时fragment是个不错的选择。

最近我就遇到了这样的情况,然而凭着自己的一点理解,始终无法使fragment生效(不得不吐槽下eclipse插件开发确实小众,资料甚是难找),经过一天多的折磨,渐渐搞清了使用fragment的几个关键点,拿来分享。

先分享一个英文资料(http://wiki.eclipse.org/Steps_to_use_Fragments_to_patch_a_plug-in

如果你照着做仍然不得其法,那么不妨继续看看我的理解和总结:

Step1:创建fragment

这个很简单,通过eclipse的新建向导,按照步骤创建即可,创建过程中需要指定fragment的ID、Version等信息(与plugin出奇一致),同时最重要的是指定该fragment对应的host插件,通过向导选择按钮配置即可。

进行到这一步,fragment创建完了,那么关键点来了,为了保证fragment中的配置文件(fragment.xml)和Java代码能够被host加载,并覆盖host对应的内容,需要做如下操作:

1)打开META-INF/MANIFEST.MF文件,点击MANIFEST.MF标签页,添加Eclipse-PatchFragment: true配置,按照我的理解,这个配置能够声明当前fragment为fragment(废话),host插件加载时需要同时加载该fragment,该配置能够保证fragment中的extension定义生效。

2)打开Runtime标签页,点击Classpath—>New,添加library.jar和“.”(完全按照向导默认即可),同时将library.jar上移到“.”之前

3)切换到build标签页,删掉“.”,然后保存。

Step2:Make Patch

在host插件中,找到你想修改的类,完完整整的复制到fragment源文件夹中(src),包路径及类名一定要一致,然后do what you want。

然而做完上述工作,启动后,你仍会发现,你改的代码不执行,仍然执行原host的代码,这是因为缺少如下重要的配置。

Step3:配置host插件

1)打开host插件(可以通过 Import—>Plug-ins and Fragment向导以Source Project或者Project with source folder方式导入)

2)打开META-INF/MANIFEST.MF文件,点击MANIFEST.MF标签页,添加Eclipse-ExtensibleAPI: true(该配置能够保证会去加载fragment的代码,但能否加载到还得靠下面的配置)

3)打开Runtime标签页,点击Classpath—>New,添加library.jar和“.”(完全按照向导默认即可),同时将library.jar上移到“.”之前

4)切换到build标签页,删掉“library.jar.”,然后保存。

※3)和4)与Step1中的2)和3)对应,总的来说是保证host插件在包路径类名相同情况下,优先加载library的代码逻辑,其次加载host本身代码逻辑,而library.jar则指向了fragment的源码,这样就保证了fragment的代码逻辑优先生效。

至此fragment的开发配置即完成。需要注意的是,打包形成最终成果物时,host插件是被更改过的,需要重新导出为插件(相比较其他方式,该方式对host改动最小),而不是原版第三方插件。

而如果你是个熟手的话,你会发现所有的操作,最终影响的只是MANIFEST.MF文件的配置,熟悉了这点你可以直接更改host插件的.MF 文件,而不必重新对host打包

备忘:同名通路径非代码文件比如除plugin.xml之外的其他文件是否按此方式也能生效,有待检验(可能需要在加载的代码逻辑处进行分支处理,类似NLS的操作)

时间: 2024-10-10 22:10:00

Eclipse Plugin Fragment使用步骤的相关文章

Eclipse web工程创建步骤及两种部署方法

1.Eclipse创建web工程步骤 (1)参考1(2)参考2 2.web工程两种部署方法 (1)部署方法同1中所述 (2)部署到Tomcat Server的webapps目录下的方法

GNU ARM Eclipse Plug-in

sourceforge的一个开源项目GNU ARM Eclipse Plug-in,适合Eclipse编译ARM,代替原来的命令行界面vim,累死Windows的集成开发环境,下面是主页链接很有用 http://sourceforge.net/projects/gnuarmeclipse/ GNU ARM Eclipse Plug-in,布布扣,bubuko.com

2.1 Hadoop Eclipse Plugin 配置及安装

Hadoop Eclipse 开发工具 主要分为 1.根据Hadoop版本生成插件 2.安装Hadoop Eclipse插件 3.配置Hadoop目录 4.配置Hadoop连接 5.新一个MapReduce工程 WordCount.java MapReduce--WordCount问题总结 参考:http://blog.sina.com.cn/s/blog_7fcb1aef0100zpux.html 正成功输入出后信息: 14/05/21 23:06:47 INFO input.FileInpu

OSGi与Maven、Eclipse PlugIn的区别

osgi 的框架的 apache felix   equinox osgi的bundle 的概念maven 的  module  的   Eclipse 的 PlugIn  的区别.... OSGi与Maven Maven也具有模块化系统的特征:但是它只是一个编译时工具,而不是运行时框架.Maven并不是OSGi的竞争者,而是OSGi的一个补充. 通过在pom.xml中指定所依赖jar包的名称.版本号,Maven就能在编译时自动下载正确的jar文件,并部署到classpath中. 然而Maven

The J-Link hardware debugging Eclipse plug-in

Quicklinks If you already know what are the features of the new plug-in and just want to know how to install/use it, you can directly skip to: J-Link install J-Link plug-in usage Why a new plug-in? Until now, debugging with the J-Link probe in Eclips

Installing the Eclipse Plugin

Installing the Eclipse Plugin Android offers a custom plugin for the Eclipse IDE, called Android Development Tools (ADT). This plugin provides a powerful, integrated environment in which to develop Android apps. It extends the capabilities of Eclipse

Eclipse Plugin Installation and Windows User Access Control

I make Eclipse Plugins and I sell them to developers using Eclipse. Most of the visitors to my web site are not Eclipse experts. One of my key challenges is getting them to successfully install and try my software. It sounds simple, but Eclipse plugi

How to setup Eclipse with WinAVR and the Eclipse plugin AVR-eclipse

源:How to setup Eclipse with WinAVR and the Eclipse plugin AVR-eclipse 中文参考: Arduino的Eclispe开发环境的搭建 Windows下使用Eclipse开发Arduino程序

使用hadoop eclipse plugin提交Job并添加多个第三方jar

来自:http://heipark.iteye.com/blog/1171923 通过 "conf.set("tmpjars", jars);" 可以设置第三方jar,之前一直只是添加一个jar,运行OK,今天打算添加多个jar的时候发现mapreduce在运行时找不到 class(ClassNotFoundException),跟踪代码发现jar文件的确上传到了HDFS中,所以甚是无解,后来上传jar到 hdfs,然后使用DistributedCache.addF