WebLogic 12.2.1:使用 EAR 中的版本覆盖 common_modules 中的 Jackson 库

WebLogic 12.2.1: Override Jackson library in common_modules with version in EAR

鉴于 Spring 4.3.11-RELEASE Web 应用程序在 WebLogic 12.2.2.1 上部署了 Jackson 2.8.10,我们 运行 遇到了问题,因为加载的 Jackson 版本是旧版本位于 WLS oracle_common/modules 树中的一个,优先于其他库。

我们尝试了以下方法:

  1. 在 weblogic.xml
  2. 中添加偏好声明

<prefer-application-packages> <package-name>com.fasterxml.jackson.*</package-name> </prefer-application-packages>

运行 -verbose:class 标志清楚地表明正在加载错误的 jar:

[Loaded com.fasterxml.jackson.databind.type.ArrayType from file:/u01/oracle/oracle_common/modules/com.fasterxml.jackson.core.jackson-databind.jar]

  1. 将 com.fasterxml.jackson.* jar 文件放入域 lib 文件夹

没有任何效果。

此外,请注意这是一个共享的 WebLogic 实例,我们在其中只有对域文件夹的写访问权限,因此我们无法提出创造性的想法,例如从 oracle_common 文件夹中物理删除有问题的遗留 Jackson 罐子,或弄乱 patch_classpath 或类似的。

非常感谢任何帮助!

问题是 prefer-application-packages 指令被放置在 EAR 内 WAR 包内的 weblogic.xml 中,而类路径没有以正确的顺序选择它:

foo-ear -> foo.war -> WEB-INF/weblogic.xml

我们通过将指令置于 EAR 级别来解决它: foo-ear -> META-INF -> weblogic-application.xml

现在可以正常工作了。