RCP: MANIFEST.MF, plugin.xml, build.properties三种文件的区别
在Eclipse插件开发中, MANIFEST.MF, plugin.xml, build.properties是三种最常见的文件,由于它们共享同一个编辑器(Plug-in Manifest Editor),经常会有插件开发者误解、混淆了这三个文件的用途。我们来看看这三个文件有哪些区别。
1、在编辑器上的区别
我们来看看Plug-in Manifest Editor是什么样子的:

上图是manifest编辑器的Overview签页的项目。注意编辑器的底部,有多个签页。
其中,Overview、Dependencies、Runtime,三个签页是MANIFEST.MF文件的图形化编辑器。
Extensions、Extension Points,两个签页是plugin.xml文件的图形化编辑器。
Build签页则是build.properties文件的图形化编辑器。
最后的三个签页MANIFEST.MF、plugin.xml、build.properties分别为对应文件的文本编辑器。
2、功能上的区别
我们知道,静态文本通常用来作为配置文件。
MANIFEST.MF对于Java程序员来说是个常见的文件(不知道的回去面壁),它用来标识当前jar包的各种属性的,如果你做过“可双击启动的jar包”,应该能想起这个文件。
MANIFEST.MF里有一般属性,也有一些和其他体系约定俗称的属性,也可以添加自定义的属性。
比如在插件开发里,一个插件项目的MANIFEST.MF基本会具备如下属性:

有些插件开发者会疑惑。为什么同样是一个jar包,有些会被Eclipse认同为bundle(不懂这个词的插件开发者去面壁),有些只能认同为普通的jar。
这个MANIFEST.MF的内容就是关键了,普通的jar包是不会具备这些bundle信息的。
在Eclipse(具体来说是equinox)找到这个插件jar的时候,会读取其MANIFEST.MF文件,以获取其名称,版本号,依赖关系,等。
然后完成我们所知的插件加载过程。
即是说,MANIFEST.MF是用来配置插件的元信息的,其属性的名和值,需要符合OSGi规范。
OSGi以MANIFEST.MF为依据,来启动插件,计算依赖性,决定约束(constraint)等等,其他的OSGi框架比如felix,也可以读取识别它。
该文件的使用发生在插件加载之前。
plugin.xml是为Eclipse的扩展点和扩展服务的。
很多人混淆了扩展点和扩展的概念。
下图所做的操作,相信插件开发人员都做过:

这一系列的完整的操作,我们应该称之为“选择了org.eclipse.ui.editors扩展点,并添加了一个扩展”
扩展点,即是Extension Point,扩展点本身其实不具备功能,它仅仅只是个“格式规范”,一个“schema”,本质上,它是个类DTD定义。
扩展,即是Extension,它是真正的配置项(XML格式),用户根据扩展点的约束填入合适的值,以完成配置。
这里不会赘述一个扩展是如何生效的,有兴趣的同学可以尝试自己定义一个“扩展点”,然后完善它的exsd定义文件。
在代码里查询扩展点内容使用如下代码:
Platform.getConfigurationElementsFor(String extensionPointId);
如此可知,plugin.xml是为了扩展点和扩展服务的,是Eclipse的专属内容。它的使用发生在插件被加载之后。
build.properties,属性文件相信大家并不陌生,插件在打包的过程中,需要提供给ant脚本一些变量,这些变量就记录在build.properties文件中。
该文件会在插件或者产品导出的时候使用到。
RCP: MANIFEST.MF, plugin.xml, build.properties三种文件的区别的更多相关文章
- python实现XML解析的三种方法
python实现XML解析的三种方法 三种方法:一是xml.dom.*模块,它是W3C DOM API的实现,若需要处理DOM API则该模块很适合:二是xml.sax.*模块,它是SAX API的实 ...
- 链接属性rel=’external’、rel=’nofollow’、rel=’external nofollow’三种写法的区别
链接属性rel='external'.rel='nofollow'.rel='external nofollow'三种写法的区别 大家应该都知道rel='nofllow'的作用,它是告诉搜索引擎, ...
- Objective-C:三种文件导入的方式以及atomic和nonatomic的区别
一.三种文件导入的方式比较: 类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...
- Objective-C:三种文件导入的方式比较
三种文件导入的方式比较: 类的前项声明@class.import.include: 1.采用@class 类名的方式,它会告诉编译器有这么一个类,目前不需要知道它内部的实例变量和方法是如何定义 ...
- <script>, <script async>, <script defer> 三种标签的区别
<script>, <script async>, <script defer> 三种标签的区别 <script>标签 阻塞html parsing 脚 ...
- Iass、Pass、SasS三种云服务区别?
Iass.Pass.SasS三种云服务区别 我们可以把云计算理解成一栋大楼,而这栋楼又可以分为顶楼.中间.低层三大块.那么我们就可以把Iass(基础设施).Pass(平台).Sass(软件)理解成这栋 ...
- 《Java多线程面试题》系列-创建线程的三种方法及其区别
1. 创建线程的三种方法及其区别 1.1 继承Thread类 首先,定义Thread类的子类并重写run()方法: package com.zwwhnly.springbootaction.javab ...
- jQuery中detach&&remove&&empty三种方法的区别
jQuery中empty&&remove&&detach三种方法的区别 empty():移除指定元素内部的所有内容,但不包括它本身 remove():移除指定元素内部的 ...
- vue定义data的三种方式与区别
在vue中,定义data可以有三种写法. 1.第一种写法,对象. var app = new Vue({ el: '#yanggb', data: { yanggb: 'yanggb' } }) 2. ...
随机推荐
- 抽象工厂模式 shiyanlou
二.什么是 抽象工厂模式 抽象工厂模式(Abstract Factory Pattern)是一种软件开发设计模式.抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来.如果比较抽象工 ...
- notepad++ 配置Python 调试环境 实用版
一. 安装python 1. 下载python 2.7版本并安装: 2. 在安装到自定义python的时候选择 add python to ptah项:
- 海量数据相似度计算之simhash短文本查找
在前一篇文章 <海量数据相似度计算之simhash和海明距离> 介绍了simhash的原理,大家应该感觉到了算法的魅力.但是随着业务的增长 simhash的数据也会暴增,如果一天100w, ...
- 如何在一个div标签里显示出另一个网页? <iframe src=" http://www.baidu.com " width="800px" height="200px" scrolling="no" frameborder="0"> </iframe>
如何在一个div标签里显示出另一个网页? 用在div里用iframe,就像下面的代码 <iframe src=" http://www.baidu.com " width=& ...
- python学习-day14-前端之html、css
一.Html 1.本质:一个规则,浏览器能任务的规则 2.开发者: 学习Html规则 开发后台程序: - 写Html文件(充当模板的作用) ***** ...
- [Tools] Vim插件管理
我们在使用插件的时候,都不希望插件安装的很杂乱,它不是一个看不见的黑盒,也为了下次方便在其它地方安装. 由于要方便插件管理,于是有了 Vundle,以下做些介绍: 1. 一个插件管理器, 自己本身也是 ...
- JSTL和EL
JSTL和EL 1.EL表达式总是放在大括号里,而且前面有一个美元符前缀. person.name2.相似点:(1).都可以让我们在静态内蓉中插入动态信息.EL:室外温度是{emp}度 JSP:室外温 ...
- IOS git 的安装
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/instal ...
- 使用Sublime Text3开发AngularJs
之前的Sublime环境安装插件弄得有点乱,卸载了重新安装: 1. 安装sublime: https://www.sublimetext.com/3 2. 注册: —– BEGIN LICENSE — ...
- 页面轮换,ViewFlipper 和 ViewPager 的区别
ViewFlipper继承ViewAnimator,切换view的时候是有动画效果的,适合做ppt,多界面的程序欢迎引导界面,算是个轻量级的组件,适合展示静态数据,少量数据. ViewPager继承V ...