PDE 动态类路径 FAQ

“动态类路径”是 Eclipse 3.0 中 PDE 计算插件的构建路径的方法。

问:什么是类路径稳定性?
答:
类路径稳定性是关于开发者所作的自我管理选择的类路径更改的度量。理想的情况是,不管工作空间中的源代码项目的补码如何,类路径都不应更改。二进制项目自我管理提供了良好的类路径稳定性,其中所有类路径都只包含项目引用。外部插件自我管理提供的类路径不太稳定。对于外部库的本地安装位置而言,它们仍然是稳定的,但作为源代码项目的插件的列表必须保留小组所有成员的常量才能通过存储库共享它们。

自 2.0 起,使用外部插件时,添加至文件系统上的插件位置的插件版本进一步降低了类路径稳定性。

问:如果二进制项目提供的类路径稳定性比较好,为什么不一直使用它们?
答:
只要导入的插件的数目很小(几十个),使用导入的二进制项目的自我管理就是个不错的选择。对于具有几百个插件的大型产品,大批导入就不合适了。通常,它们的开发者对一些源代码项目、 一些直接相关的二进制项目以及作为外部插件的所有其它项目进行自我管理。从纯理论的角度来看,浪费时间和资源导入大量外部插件以便能够编译几个源代码项目有点奇怪。

问:我认为(二进制项目/外部插件)自我管理方法比较好。但为什么我们小组一起使用它时会出现问题?
答:
静态类路径(使用二进制项目或外部插件)在您选择的自我管理方法中强制进行类型转换并强制其他所有人使用它。

问:什么是动态类路径?
答:动态类路径是一个 PDE 功能部件,与插件依赖项相关的插件项目类路径的一部分是使用 JDT 类路径容器技术动态计算出来的。动态类路径的解析是即时执行的,而且总是与工作空间中的条件同步更新。而且,类路径解析的动态特质允许 PDE 适应更改并总是具有正确的类路径,不管您使用的自我管理的方法是什么。

问:什么是动态类路径的类路径稳定性?
答:
因为必需的插件的所有条目最终都会被替换为一个类路径容器条目,所以类路径总是一样的。

问:动态类路径能带给我什么帮助?
答:使用动态类路径,就不需要就自我管理样式作出公开决策。如果二进制项目存在,则动态类路径将解析为项目引用。如果二进制项目不存在,则它们将解析为外部插件 JAR。在添加或除去二进制项目时,动态类路径将跟踪这些记录更改并适应它们。您不需要再次更新类路径。此外,想要采用 CVS 中的一个或多个项目并编译它们的其它小组不必使用您的个人自我管理样式就可以完成任务。

问:既然 PDE 核心将解析动态类路径,那是否表示我要依赖 PDE 执行正确的操作?
答:
对,是这样的。因为类路径是动态的,所以类路径总是实时计算的,而不是在 .classpath 文件中硬编码的(这是整体概念,对吧!)。但要考虑以下情况:PDE 用来计算尽可能符合运行时条件的类路径的算法非常复杂。JDT 编译器在开发时见到的内容应该尽可能符合类装入程序在运行时见到的内容。同您自己相比,在大多数时间 PDE 核心更有能力使类路径保持最新。如果需要手工扭转类路径以进行编译,则设置很有可能会出错,而且插件不能正确运行的机率也很大(SWT 小组例外)。

问:我的小组使用二进制项目进行独占式自我管理。切换至动态类路径会丢失一些东西吗?
答:
不要这样做。动态类路径不能指示您就自我管理安排所作的个人选择。它只解析给定上下文中的插件依赖项。如果继续导入外部插件作为二进制项目,则动态类路径将按以前的作法解析为项目引用。

问:我需要怎样做才能激活动态类路径?
答:
更新所有 2.1 插件的类路径一次。您会注意到,现在类路径变短了,而且所有从属插件引用现在被替换为一个容器条目。您可以继续工作。确保将源代码项目检入到存储库中,包括已更改的 .classpath 文件。

问:我有额外的类路径条目,所以我可以编译我的 Ant tasks/servlet/JSP。
答:
作为类路径计算的一部分,PDE 将考虑 build.properties 文件中的“jars.extra.classpath”属性。如果为构建作了正确的设置,则 PDE 将生成正确的类路径。

问:如何处理动态计算的类路径条目?
答:
您不太可能需要处理动态类路径条目,不过您可以通过“属性”>“Java 构建路径”>“库”选项卡完成此操作。展开“插件依赖项”节点并在该位置处理这些条目。

问:某些针对库计算出来的条目没有源代码连接。我可以手工添加吗?
答:
PDE 为大多数库计算了源代码连接。偶尔会有因为源代码 Zip 文件未遵循命名约定而导致自动源代码连接失败的情况。可在构建路径属性对话框中手工连接这些条目的源代码。

问:我的手工源代码连接在下次 PDE 动态计算类路径时会毁坏吗?
答:
不会。只要库路径不更改,PDE 会记录这些手工进行的操作并在动态计算后重新应用它们。

问:我是一个 SWT 开发者。我能使用动态类路径吗?
答:
很遗憾,不行。SWT 小组有独立的自我管理设置,通过此设置,用于各种环境的类路径将保存在存储库中并根据他们工作的平台在项目的 .classpath 中重命名。他们必须继续使用他们的自我管理方法。