问题

插件开发中, 有时候我们会在内部使用一些第三方的 lib, 这些 lib 可能会与我们服务器中的 lib 相冲突。 从而导致插件无法继续运行的尴尬场面。


解决方案

 2019.07.03 后的版本中, plugin.xml 加入了 prefer-packages 属性,解决这个方法。

 2020.03.25 后的版本中, prefer-packages 属性可以支持通配符 * ,方便设置批量加载

案例


<prefer-packages>
	<prefer-package>com.fr.harrison</prefer-package>
</prefer-packages>



之后,当加载到相关的类时, 比如 com.fr.harrison.test1. 
则会避免双亲委派, 先从 plugin/classes 或者 plugin/lib 中读取类。
从而避免在插件内部使用一些类时与我们服务器中的 lib 冲突。

如果有多个可以使用多个子节点 prefer-package。


<prefer-packages>
	<prefer-package>com.fr.harrison</prefer-package>
	<prefer-package>com.fr.alex</prefer-package>
</prefer-packages>


通配符使用方式

<prefer-packages>
	<prefer-package>*</prefer-package>
	<prefer-package>com.fr.*</prefer-package>
	<prefer-package>com.fr.*.harrion.*</prefer-package>
</prefer-packages>