可以简单地把plugin放到eclipse SDK本身的features和plugins目录下来进行plugin的安装,但是这种方法并不利于plugin的治理:
虽然可以通过eclipse SDK的update功能来升级自身,然而因为速度的原因我们一般还是会选择完全下载新版本,这样就需要把后来安装到eclipse SDK目录下的plugin都挑选出来并拷贝到新版本的eclipse SDK目录下,假如这样的plugin比较多的话将会有些麻烦。
有时候会共存多个版本的eclipse SDK,显然我们并不想把这些plugin拷贝到每个版本的eclipse SDK里 eclipse platform是支持把plugin安装到其他目录的,不过它对这些目录是有要求的:该目录必须有一个名为eclipse的子目录,eclipse子目录下必须有一个.eclipseextension文件,plugin本身放在eclipse子目录下的features和plugins目录下。这样的一个位置就是一个eclipse extension,.eclipseextension文件描述了这个eclipse extension,包括三项name、id和version;可以有多个eclipse extension,具体创建几个eclipse extension,每个eclipse extension包含哪些plugin,完全视情况而定,比如可以把关系比较密切的几个plugin放在一个eclipse extension中。
显然我们必须告诉eclipse platform这些eclipse extension的位置才行,这有两种方法:
当eclipse启动后用,打开Help->Software Updates/Manager Configuration,用Add an Extension Location来添加eclipse extesnion,指定的位置将会被存放到当前的configuration里
在eclipse platform所在的eclipse目录下建一个links目录,在该目录下放一些以.link结尾的文件,文件中指定eclipse extension的位置,每行一个,格式为path=location,路径分隔符为正斜杠,假如用反斜杠必须用两个以转义 第一种方法是把eclipse extension的位置保存在当前configuration中,因此用这种方法指定的eclipse extension是特定于configuration的,不同的configuration可以具有不同的eclipse extension配置,可以在启动时用-configuration选项来选择一个configuration,但是似乎当添加完eclipse extension后是不能删除的,只能disable,而且多个configuration也带来了治理的负担;第二种方法比较明了,但它是configuration insensitive的,不管以哪个configuration运行这些eclipse extension都是可见的,这里不用担心内存的占用问题,因为eclipse的plugin都是lazy loading的,用不到的plugin是并不会占用内存空间的,不过可能会有plugin冲突问题,比如两个插件在同一个extension point处扩展,而对extension point的处理又是不可配置的,比如选择extension的策略是找到的第一个extension,而此时假如我们希望运行的extension恰好排在第二位,那么就有问题了,这时可能就需要两种方法都用到了。
配置好eclipse extension后,这些eclipse extension中的plugin就和eclipse platform/sdk中的plugin,按照extension和extension point的关系,共同形成了一个插件网络,这时各个plugin的位置已经没有区别了,你甚至可以指定运行位于eclipse extension中的prodUCt。
一般的plugin包都会把eclipse目录打进去,这样只要把该包直接解压到选定的eclipse extension目录中即可,不过如前所述,要成为真正的eclipse extension目录,还需要一个.eclipseextension文件,除了手工建立外,当从update site安装plugin时还可以让eclipse来建立它,只要在安装对话框弹出时选择change location指定一个目录即可。