简单自主管对于大多数单机情况来说已经足够了,并且特别适合于对作为目标的大型产品进行开发。但是,在某些情况下,需要更高级的解决方案:
由于外部插件不在工作区中,因此它们不是搜索范围的一部分。于是,各种搜索(对于接口、类引用和实现等等)返回的结果将比期望的要少。Java 插件将只能看见作为工作区插件的类路径一部分的外部库。
与方案 1) 紧密联系,只有工作区插件必需的插件才能浏览外部插件的源代码。看不见其它插件。
类路径不稳定。如果对工作区中的大量相互独立的插件进行工作,则 PDE 将这些依赖性表示为项目引用。比较起来,外部插件的依赖性将使用 ECLIPSE_HOME 变量和外部 JAR 来表示。如果这些项目是使用资源库来共享的,则将强制其他开发者复制此补充内容,即使他们不需要您在工作区中具有的所有插件。
一个明显的结论就是,如果所有插件都在工作区中,则将解决所有这些缺点。搜索将按预期方式进行,所有类都可以看见源代码,类路径将统一(即,将只包含项目引用)。但是,总是以源代码形式从共享资源库中添加整个产品将大大降低下载和编译的速度。因此,引入了二进制项目这个概念。
二进制项目是不包含源代码的常规插件项目。因此,在编译期间将忽略它们,并将它们只用来解决上面所列示的缺点。使用 PDE 导入向导将外部插件导入工作区中。
在导入二进制项目之前,配置 PDE 以便进行二进制自主管是很重要的。因为我们将不对已解析的引用使用外部插件,所以应该在“首选项”中禁用它们。然后,使用文件 -> 导入... -> 外部插件和段来调用“导入”向导。
大多数时候,将接受第一页中的缺省值。缺省情况下,您将导入在“首选项”中设置的目标运行时工作台中的外部插件。导入向导的第一个页面通过更改... 按钮来提供插件开发 -> 目标平台页面的快捷方式从而允许您更改运行时工作台的位置。
导入二进制项目可能会导致工作区增大,并且导入操作本身可能会消耗很多时间,这取决于正在导入的插件数目和内容。为了解决这些问题,PDE 采用了使用链接来导入这一概念。如果取消选择“将插件内容复制到工作区位置中”复选框,则 PDE 将不会把您选择的插件的内容导入工作区中。而它将执行的操作是在工作区中为这些插件创建项目,并为要导入的每个文件创建链接资源。这些链接资源指向安装中的实际文件,并且将显示在工作区中,就好象它们是显式导入的一样。您将能够浏览它们,但是不能修改它们,这是因为修改这些文件将导致修改原始文件。删除二进制项目当然也会删除它包含的所有链接文件。
自动将源代码连接至 JAR 文件和抽取源归档选项要求 PDE 查找包含源的 zip 文件。对于此任务,PDE 具有两个要求:
1. 必须正确命名 zip 文件。如果库名是 xyz.jar,则必须将包含该库的源的 zip 文件命名为 xyzsrc.jar。
2. zip 文件必须与 JAR 文件在一起或者在已声明的一个源代码位置中。在 Eclipse 中,源代码被封装在独立的插件中,源代码位置是使用“org.eclipse.pde.core.source”扩展点来声明的。PDE 自动执行目标平台中的所有扩展,计算在该平台中找到的所有源代码位置,并将这些源代码位置添加至插件开发 -> 源代码位置首选项页面。
如果从不同于在插件开发 -> 目标平台页面上指定的目标平台的位置进行导入,并且源代码是使用“org.eclipse.pde.core.source”扩展点封装的,则务必将这些源代码位置手工添加至插件开发 -> 源代码位置页面,以便 PDE 可以成功找到源。
库路径有时候包含一些变量,例如,$ws$。PDE 通过替代在插件开发 -> 目标环境页面上设置的值来替代这些变量。如果这些值与正在从其中导入的平台不兼容,则导入向导的第一个页面通过更改... 按钮提供了该首选项页面的快捷方式,该按钮允许您修改该首选项页面上的值。
当按了“下一步”时,向导将计算所有导入候选值,并使它们在复选框的列表中可用。您将选择的插件的实际设置取决于您自主管的方式。
如果您正在对尚不存在于目标平台中的插件进行工作,则您将想选择所有选项(全部选中)。如果列表上的某些插件已经以源代码形式存在于工作区中,则您将想按现有项目,然后按反转选择。这将导致选择尚未在工作区中的所有插件。
当按完成时,所选择的插件就将导入到工作区中。PDE 还将设置它们的类路径并将源归档与库相关联,以便您可以浏览或调试它们。
当工作区中具有大量二进制项目时,很难将它们与源项目区分开。PDE 提供了两种补充方法来处理此问题。它提供这样的标号修饰符:它将“二进制”图标覆盖层添加至常规项目图标,以明显地标记二进制项目。可以在“工作台 -> 标号修饰”下面的“首选项”中打开它。另外,PDE 还将二进制项目过滤器添加至“Java 浏览器”视图。当使用该过滤器时,它将隐藏二进制项目,并且只保留您正在使用的二进制项目。