java - 部署到 WebLogic 时出现“weblogic.application.ModuleException: java.lang.NoSuchMethodError:org.springframework.util.MultiValueMap.addAll”
问题描述
我有许多 Spring Boot Maven 项目。它们是用于Angular/React
UI 客户端的 REST 服务的非常简单的包装器。我使用集成的 Tomcat-9 在 Eclipse 中进行开发,然后部署到 Linux 上的 WebLogic-12c [WLS]。我使用spring-boot-starter-parent
带有2.2.4.RELEASE
以下组件的版本:
- spring-boot-starter-web
- 弹簧安全配置
- 弹簧安全网络
项目/webapps 非常相似,并且在 WLS 中都可以正常工作,尽管我们有一些类路径冲突,但能够按照WEB-INF/weblogic.xml
Oracle 的建议使用类似这样的方法来解决它们:
<wls:prefer-web-inf-classes>false</wls:prefer-web-inf-classes>
<wls:prefer-application-packages>
<wls:package-name>org.slf4j</wls:package-name>
<wls:package-name>org.springframework.*</wls:package-name>
</wls:prefer-application-packages>
然而,尽管配备了相同的 weblogic.xml,但最后一个项目不会部署到 WLS。它在Tomcat
and中运行良好local WLS
,但由于以下原因在服务器上失败:
weblogic.application.ModuleException:
Caused By: java.lang.NoSuchMethodError: org.springframework.util.MultiValueMap.addAll(Ljava/lang/Object;Ljava/util/List;)V
at org.springframework.core.io.support.SpringFactoriesLoader.loadSpringFactories(SpringFactoriesLoader.java:140)
at org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames(SpringFactoriesLoader.java:119)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:429)
at org.springframework.boot.SpringApplication.getSpringFactoriesInstances(SpringApplication.java:421)
at org.springframework.boot.SpringApplication.<init>(SpringApplication.java:268)
我在本地 PC 上安装了两个版本的 WLS——14c,然后是 12c——就像我们在 Linux 服务器上运行的一样。有问题的项目在两者上都在本地运行,没有任何问题。
这个“坏”项目与“好”项目具有完全相同的依赖关系。事实上, 的内容WEB-INF/lib
是完全一样的。到目前为止,我找不到是什么让这个项目如此特别以至于 Spring 无法初始化。
所以这是我的问题。什么可能导致此 WLS 部署问题以及解决方法。
非常感谢您的帮助。
解决方案
在我添加之后,<wls:package-name>org.springframework.*</wls:package-name>
根本就没有问题......如果我首先删除了失败的部署。然而,我使用 WL 控制台上的安装选项来上传新的战争文件,然后更新以重新部署。显然,WL 在尝试更新一开始就失败的部署时,这种方法存在问题。
推荐阅读
- c# - 无法使用“使用 System.Linq;”导入 Linq 在 C# 中
- javascript - 单击任务时如何在任务下划线并将其保存到数据库
- linux - 如果在folder1中创建了一些新文件夹,为什么我必须重复输入“sudo chmod -R 0777 folder1”
- c++ - C++ 异常和静态链接
- spring - 完成交易的正确方法,而不是一些工作人员
- javascript - 如何使用 ajax 加载更多徽标?
- qt - QMake 使用 subdirs 项目运行代码两次,无论 !build_pass 条件如何
- postgresql - 如何在 PostgreSQL 中通过对象标识符 (OID) 删除表?
- c# - 如何修复“当前上下文中不存在名称‘字符串’”
- java - 在日期字段中不能使用超过“2038”的年份:Java