Eclipse 2.1 包括许多性能增强功能(包括类装入区域的一些功能)。为了帮助进行此项工作,已将标记添加至插件清单文件,此文件会说明标记的使用。
-noPackagePrefixes
命令行自变量传递给 Eclipse 可执行文件。
插件清单文件中的包前缀声明由在该文件中声明的每个库的
packages
元素指示。packages
元素具有 prefixes
属性,该属性列示了该库的包前缀。
jar 文件包含驻留在多个包中的代码是很常见的。例如,org.eclipse.core.runtime
插件包含下列包中的代码:
org.eclipse.core.runtime
.
org.eclipse.core.internal.runtime,
org.eclipse.core.internal.plugins
org.eclipse.core.runtime.model
在这种情况下,plugin.xml
指定:
<runtime>
<library name="runtime.jar">
<export name="*"/>
<packages
prefixes="org.eclipse.core"/>
</library>
</runtime>
请注意,org.eclipse.core
是插件中所有包的公共前缀。备用方法是在文件中以用逗号分隔的列表的形式声明所有这 4 个前缀。在这种情况下,必须在对多个条目的必需的检查次数与可能包括错误匹配的前缀之间进行权衡。视对代码进行结构化的方法的不同,可能最好是列示 5 到 10 个包前缀而不是使用一个更通用的前缀。例如,如果多个插件上的所有代码都包含相同前缀(例如,com.mycompany
),则当您在文件中只列示单个前缀“com.mycompany”时,您就没有充分利用到所有优点。
当插件包含多个库声明时,每个声明在它的 jar 中都应该具有包前缀。
如果选择不将任何 packages
元素包括在插件清单中,则您的代码仍会起作用,但没有充分利用到类装入优化的优点。注意,包前缀的列表对于插件中所有库的所有包必须是完整的。如果此列表不完整,则您的代码将不起作用。
在 Eclipse 2.0.2 和早期的 Eclipse 2.1 Integration 构建中,添加了一个允许用户指定类装入器属性文件(它包含了启用类装入器增强功能的包前缀)的功能部件。此文件的使用是在此处指定的。
Eclipse 2.1 与类装入器属性文件完全向下兼容,因而,实际上,可以将它与插件清单中的包前缀声明结合使用。本节描述这两种机制之间的交互行为。
缺省行为:(无命令行自变量)将从 plugin.xml
文件读取包前缀并将它们应用于类装入策略。不访问或考虑 classloader.properties
文件。
使用 -classloaderProperties:先从 plugin.xml
文件读取包前缀,然后读取 classloader.properties
文件。如果类装入器属性文件中存在一个条目对应于在清单文件中定义了前缀的插件,则属性文件中的条目将重设并优先于其它条目。(结果未合并)如果属性文件中的条目不包含值(例如,org.eclipse.core.runtime=
),则将除去在清单文件中声明的任何前缀,且类装入策略将缺省为不使用增强功能。
使用 -noPackagePrefixes:忽略在插件清单文件中声明的任何包前缀,也不考虑类装入器属性文件。类装入策略缺省为不使用前缀增强功能。
使用 -classloaderProperties 和 -noPackagePrefixes:忽略插件清单文件中的任何包声明。在类装入时读取类装入器属性文件并考虑在该文件内定义的任何声明。
如果获取了 java.lang.ClassNotFoundException
,则这指示清单或属性文件中的条目可能有问题。尝试使用 -noPackagePrefixes
命令行自变量运行 Eclipse,而不要使用 -classloaderProperties
自变量。这将禁用与包前缀有关的所有类装入增强功能。
如果在完成此操作之后您的代码运行情况良好,则表示文件语法是正确的,但是以逗号分隔的列表中的包前缀可能丢失了某些条目。要验证发生的是否就是这个问题,注释掉文件中的适当行。使用数字符号(#)来注释掉属性文件中错误的插件的行,或使用
HTML 注释字符(<!-- ... -->)来注释掉错误的 plugin.xml
文件中的包声明。
NoClassDefFoundError
问题。可以通过使用 -noPackagePrefixes
命令行自变量关闭类装入器增强功能或通过将适当的包前缀条目添加至插件及其所有段来解决此问题。