【仅供内部供应商使用,不提供对外解答和培训】
【仅供内部供应商使用,不提供对外解答和培训】
插件开发中, 有时候我们会在内部使用一些第三方的 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>
8 Comments
Anonymous
这个属性的值是开发的插件的包吗,为什么我设置了还是没有用?
ezreal-陈军
这个值 应该是插件引用的第三方包的类路径,防止插件引入的包和工程本身的包冲突问题的
Anonymous
两个包都是一个路径,如果路径不同也不会冲突了吧
Anonymous
应该是指定lib的路径吧,可是看例子这么写又不像是,实例也说的不清晰
ezreal-陈军
额 这个的作用就是解决类冲突问题的,如果没有这个问题 就不需要加这个标签
Anonymous
但是不知道这个标签具体该怎么定义
richie-季明华
假设你在WEB-INF/lib下放了4.0的httpclient包,在插件下也是用了httpclient包,但是版本是5.0的,因为默认是优先加载WEB-INF/lib下的jar包,这时候就可能出现你在插件中用的新的API无法调用,报ClassNotFound之类的异常,这个时候就可以在plugin.xml中增加一个标签说明,让插件优先使用自带的5.0的httpclient的jar,示例如下:
Anonymous
明白了,谢谢