友情推荐:Java集成开工具专区编程教程专区
试图定位无法解析的插件依靠性是件紧张而又耗时的事情。激活每个插件都要依靠于很多其他插件,这些插件又会依靠于其他更多插件。假如 Eclipse 无法加载这个长长的链条中的某个插件,那么手工查找出现问题的到底是哪个插件可能会比原计划所花费的时间和精力都要多。假如您希望有一种方法可以自动实现这种插件依靠性的检测,就请阅读本文。
碰到的问题
假设我们希望在 Eclipse 中使用一个特定的插件,并已经执行了所有必须的操作,将其包含到插件的 manifest 文件中,并将其声明为一个依靠文件。但是系统并没有加载这个插件,这样我们就会被困在这里了,软件开发就无法继续进展下去了。
听起来非常熟悉吗?假如是这样,那么您可能早已花费了很多时间和努力来查看很多 plugin.XML 文件,从而查明 Eclipse 可能没有加载哪个特定的插件。还可能已经尝试使用了 Eclipse PDE 项目提供的 Plug-in Dependencies 视图,此时您会发现这个视图的唯一工作不过是显示已经成功加载的插件而已。不幸的是,有问题的插件很可能并不属于成功加载的插件。
要确定 Eclipse 没有找到或加载哪个特定的插件,我们应该做些什么呢?我们不用手工遍历每个 plugin.xml 文件,而是考虑自动实现这种搜索功能。要自动进行搜索,我们需要了解 Eclipse 是如何保存自己的插件的,以及如何发现到保存在磁盘上的其他插件的链接。基于这些知识,我们可能会希望编写自己的代码来创建一个插件依靠性遍历程序,或者使用在本文中给出的这个通用的 Dependency Walker 插件。本文的 “下载” 一节给出了这个例子的源代码。
开始:理解插件依靠性和 Eclipse 的插件链
插件依靠性
Eclipse 插件是提供了其他插件可以使用的功能的软件模块。假如插件 A 需要插件 B 才能正常工作,那么我们就说 A 依靠于 B。这种依靠性还意味着,除非插件 B 已经成功加载了,否则插件 A 就不能正常工作。有时候,插件 B 可能还会依靠于插件 C、D、E,令人更不爽的是,这些插件每个都可能会依靠于其他插件。这种依靠链很轻易形成数百个插件相互链接在一起。毫无疑问,假如这个链条中的任何一个插件不能成功加载,那么依靠它的插件就可能会出现问题。
插件 manifest 文件 plugin.xml 描述了每个插件。这个 XML 文件中有一节声明了对于其他插件的依靠性或需求。在清单 1 中,plugin.xml 文件中使用黑体表示的一节就声明了这种依靠性。
清单 1. plugin.xml 文件
<?xml version="1.0" encoding="UTF-8" ?>
<?eclipse version="3.0"?>
<plugin id="org.eclipse.draw2d" name="Draw2d" version="3.0.0"
provider-name="Eclipse.org">
<runtime>
<library name="draw2d.jar">
<eXPort name="*" />
<packages prefixes="org.eclipse.draw2d" />
</library>
</runtime>
<requires>
<import plugin="org.eclipse.swt" export="true" />
<import plugin="org.eclipse.core.runtime" />
</requires>
</plugin>
注重嵌入在 <requires> </requires> 节中的 <import plugin="plugin id"/> 声明。清单 1 的例子说明这个插件 ID org.eclipse.draw2d 依靠于 ID 为 org.eclipse.swt 和 org.eclipse.core.runtime 的插件。
插件链
当我们在 Eclipse 中使用 Java? 技术平台来开发软件时,系统实际上根据所选择的目标平台对源代码进行编译。可以在 Window > Preferences > Plug-in Development > Target Platform 中指定目标平台的位置。这个目标平台在 <targetPlatform>\eclipse 中有自己的一个 Eclipse 副本。要为代码解析这些依靠性,请从两个地方查找是否存在所需要的插件:
<targetPlatform>\eclipse\plugins 文件夹中的 Eclipse 插件
<targetPlatform>\eclipse\links 文件夹中 .link 文件所指向的链接插件程序员通常会将第二个地方称为 links 文件夹。这个 links 文件夹中包含 0 个或多个文件,文件名通常都是以 “.link” 扩展名结尾。这些文件中包含了一些链接信息,可以使用这些信息定位在磁盘上哪些地方可以找到链接插件。
每个 .link 文件都有一个要害字-值对,其格式为 path=location。(例如,links 文件夹 C:\eclipse\links 中就可能会有很多 .link 文件,其中一个文件的名字可能为 com.ibm.indiver.dependencywalker.link。这个文件中唯一的一行可能类似于 path=c:\myPlugins\dependencyWalker)。这个 .link 文件会将 Eclipse 引导到指定的位置,并在 \eclipse\plugins 文件夹中寻找更多的可用插件。