如何驾驭 Eclipse 功能部件(二)

来源:互联网 发布:烈日灼心 知乎 编辑:程序博客网 时间:2024/05/18 03:30
功能部件在运行期标识组件

Eclipse 允许标识活动产品,也可以选择标识运行期配置中的每一个功能部件。功能部件不是必须要标识出来,您可以不标识您所有的功能部件,但是您应该至少标识一个。

标识定义――插件的工作

添加标识的关键问题是要明白把标识的定义在哪里。您定义标识的是功能部件,但是标识的内容是来自于插件。或者插件与功能部件的id相同(默认的情形),或者插件在功能部件的定义中被明确标识(这是 Eclipse 2.1.1 的新增功能)。在 Eclipse 2.1 中,一个功能部件定义可以通过在 feature.xml 文件中指定属性 plugin=… 来定义其他插件,插件包含了用于定义和提供标识内容的文件。

标识内容概要介绍

about.ini 控制文件定义了产品级和功能部件级的标识。产品标识必须正确包含以下两方面内容:

·功能部件必须被定义为一个可能的主要功能部件,即在 feature.xml 定义文件中要包含 primary="true"。

·功能部件必须被标识为活动的主要功能部件,在产品中通常是在 /eclipse 目录下的 install.ini 文件中的条目来设置。主要功能部件也可以在运行期通过使用 -feature featureId 启动参数来定义。

理解功能部件标识的最简单的办法是去查看在 about.ini 控制文件中定义了哪些元素,以及它们在一个被标识的产品或功能部件中如何起作用。



图 2. 在 Eclipse 透视图中可用的标识内容


以下几条仅用于产品标识:

·windowImage

·appName

·aboutImage

其余条目在产品及功能部件标识过程中使用。

以百分号(%)开头的值在 about.properties 文件中解析。当一个功能部件是主要功能部件时,用 abouText 关键字定义的文本会在 About product 对话框中显示。当用户点击 Feature Details 按钮时,随后弹出的 About Features 对话框中也会显示这些本文内容。

功能部件被加入到运行期配置时,会打开 welcomePage 条目指定的欢迎页面,其后还可以通过选择 Eclipse 菜单选项 Help > Welcome... 打开的 Welcome 选择对话框打开这个欢迎页面。

构建一个可行的有标识的功能部件的最快速方法是克隆一个在 Eclipse 本身中可以找到的一个现有的功能部件。具有 org.eclipse.platform id 的功能部件和插件会提供功能部件标识和插件标识。在The Java Developer's Guide to Eclipse一书第34章练习7中有一个步骤详尽的指导说明。在 Eclipse.org 的更新管理器子工程的开发资源中,您可以找到另外一些关于标识的详细说明。

使用 PDE 构建功能部件的策略

在《The Java Developer's Guide to Eclipse》一书中关于功能部件开发的章节和 Eclipse.org 的文章 《PDE 生成插件》中都对构建功能部件的过程进行了介绍,但是也还有一些其他的途径。当您理解了如何使用 PDE 来构建功能部件和相关联的插件之后,您可以让这些步骤自动完成。

由 PDE 实现的 Ant 目标

让我们从对 PDE 所提供功能概要介绍开始讲起。PDE 将为一个 plugin.xml 或 feature.xml 文件生成 build.xml 文件。Build.xml是一个 Ant 脚本,可以完成运行期平台的功能部件和插件所需要的不同任务。PDE 构建过程允许您生成下列构建目标中的一个或多个。

重要的功能部件构建目标:

·build.jars 为每一个引用到的插件调用 build.xml 文件中的 build.jars 任务。

·build.update.jar 为每一个引用到的插件调用 build.xml 文件中的 build.update.jars 任务。同时会为功能部件创建一个 Update JAR。这是 Ant 脚本的默认目标。

·build.sources 为每一个引用到的插件调用 build.xml 文件中的 build.source 任务。

·zip.distribution 创建一个包含功能部件和引用到的插件所需要的所有文件的压缩文件。

·refresh 使 Eclipse 刷新功能部件工程及任何引用到的插件的工程。

重要的插件构建目标:

·build.jars 为插件定义的每一个运行期 JAR 调用 build.xml 文件中的许多目标。被调用的目标的名字与运行期 JAR 文件的名字相同。这些目标编译 Java 代码并创建 JAR 文件,包含任何在源文件目录下的资源。

·build.update.jar 将所有运行期插件目录下所有需要的文件压缩打包为一个名字为 plugin.id_version.jar 的文件,在这里 plugin.id 和 version 来自于 plugin.xml 文件。这是 Ant 脚本的默认目标。

·build.sources 基于给定的运行期 JAR 文件所定义的源文件目录,创建 Java 源文件的压缩包。

·zip.plugin 创建一个包含有插件所需要的所有内容的压缩包。

·refresh 使 Eclipse 刷新插件工程。

注意:在功能部件和插件的Ant 处理过程中,更新 JAR 或生成压缩包的处理过程中打包的文件,是运行期环境所需要的那些文件。这些内容在功能部件或插件的 build.properties 文件和在 plugin.xml 中定义的每一个插件的运行期 JAR 文件中,通过 bin.includes 或者 bin.excludes 条目来描述。
为了构建一个插件,您可能会指定 clean,build.sources,build.jars,zip.plugin,refresh。为了构建一个功能部件,您可能会指定clean,build.sources,build.jars,zip.distribution,refresh。您或许会想要在开始时使用 clean 来强制重新生成所有结果,经常会有这种情况。尽管 Ant 处理过程将基于输入的变化重新执行所需要的步骤,但是有一些变化不会触发所有需要的处理过程。测试结果表明如果您改变了一个 Java 源文件,相应的源文件压缩包将会更新,但是类不会被重新编译,运行期 JAR 也不会被更新。所以安全起见,建议您先将输出结果清空,以保证您在重新构建后所使用的是对应于当前源文件的运行期版本。

讨论方案

为了进行讨论,我们先描述一下只有一个功能部件和插件时在运行期配置中需要的内容。



正如您所看到的文件名,虽然这些文件大部分属于运行期环境,还是有一些文件不是您想要与其他人共享的(例如,您的设计文档)。

包含策略――指出所需要的部分

至少到刚开始时,最简单的方法是,在构建过程中将您要打包的部分作为在运行期配置中功能部件或插件的一部分而列出来。相应的 build.properties 文件分别如下所示:



排斥策略――指定不需要的或私有的部分

另一种方法是把您不想打包的部分在构建过程中作为功能部件或插件的一部分列出来。这不仅要包括您不想共享的文件,还要包括构建过程中创建的文件和目录(有一些是临时的)。这种方法用到的 build.properties 文件如下:



如果给定功能部件或插件的 id 值为 com.your.feature.id 或者 com.your.plugin.id,那么您在使用排斥策略的时候还需要在文件中包括以下条目:

com.your.feature.id_1.0.0.bin.dist.zip,/com.your.feature.id_1.0.0.jar,/com.your.plugin.id_1.0.0.jar,/


zip 条目将使生成的组件压缩包不被 update JAR 或者组件压缩包自己所包含。JAR 条目将使生成的功能部件或插件的 update JAR 不被组件压缩包或者 update JAR 自己所包含。当您的组件压缩包或者 update JAR 看起来比它应该的大小要大,或者在每次您进行编译时包的大小呈跳跃式增长,说明您应该执行以上步骤了。您需要在适当的功能部件或者插件的 build.properties 文件中加入以上条目来解决这个问题。

对文件或者结构变化的响应

除了以上提到的之外,当一个新的文件或目录添加到功能部件或者插件时,还有必需的响应需要考虑。我们的意思是您得让您的功能部件和插件能应付可能的改变,也就是说它们分别需要一个feature.properties文件和一个plugin.properties文件。当您用包含策略时,您需要给.properties 文件添加一个适当的属性,如果是使用排斥策略的话就不用这样做了。

不论哪种方法,如果您把一个文件添加到一个目录,那么不需要做任何其他的改动。对于新添加的文件,如果使用的是包含策略,它会被发送处理,如果使用的是排斥策略,它将不会被发送处理。这实际上是您可能应该要考虑使用不同的目录来存放不同的文件的原因。例如,您的插件所用到的所有图片所在的目录应该被包含在内,而一个开发过程中存放插件的设计讨论或文档的目录则不然。

最坏的情形是当您忘记对 build.properties 进行更新时:会发生运行期失败或生成内容存在差错的产品。如果您使用包含策略,新加入的文件或目录在打包后是不可用的,这有可能会导致您的插件不能用或者显示出 Eclipse 默认的图标(红盒子)。如果是使用排斥策略添加新文件或目录,这些文件或目录的内容在打包过程中会被包含进来。根据您的风格选择适当的方法,从而把您忘记执行更新时的风险降到最低。这将取决于您所面临的主要问题:是功能部件或插件不能运行,还是其他人本不应该看到运行期目录下的文件。
原创粉丝点击