如何修复JDK11 Tomcat9 Spring应用程序上的JAVAX运行时错误

Ada*_*dam 8 java spring tomcat maven docker

在Tomcat9上启动我的应用程序时遇到的特定错误。春季版本:5.1.5。

SEVERE: Error configuring application listener of class [org.springframework.web.context.request.RequestContextListener] java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceRef

关于此错误,有多个答案都建议添加Maven依赖项。我添加了以下依赖项:

POM.xml

我的构建路径:

在此处输入图片说明

WebServiceRef班是在Package Explorer中找到:

在此处输入图片说明

在Tomcat9上启动应用程序时,控制台中会显示此错误。这是更多的堆栈跟踪: 在此处输入图片说明

SEVERE: Error configuring application listener of class [org.springframework.web.context.request.RequestContextListener] java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceRef at org.apache.catalina.core.DefaultInstanceManager.populateAnnotationsCache(DefaultInstanceManager.java:303) ...more stuf.... java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)

任何帮助或建议,将不胜感激!

更新1: 以下是一些.jar文件,这些文件被复制到WEB-INF / lib下的最终.war版本中。这里有4个新的Maven依赖项及其版本,但是也可能有重复的.jar文件。

在此处输入图片说明

更新2: 直接将下颚API jar复制到我的Tomcat Classpath中解决了运行时错误...因此,该应用程序现在正在启动,但是当实际部署.war文件时,我将如何克服此问题?

在此处输入图片说明

Ada*_*dam 2

这个问题归结为 Docker Desktop (Windows) 干扰 Tomcat,特别是 Tomcat 的管理端口8006,这迫使我更改端口号以允许 Tomcat 启动(例如从8006 更改为 8007 )。我曾经有一个旧的 Tomcat 容器,当我的计算机通过 Docker Desktop 启动时,这个容器可能已被启动,而我却没有意识到。

假设您的 pom.xml 具有必要的依赖项,则已完成修复问题的步骤。

  1. 停止 Docker 桌面
  2. 使用最新的JDK11 版本并根据需要更新 JAVA_HOME
  3. 将默认 Tomcat 管理服务器端口恢复为8006
  4. 重新发布/重新启动 Tomcat 服务器

我认为在大多数情况下,这个问题将通过使用所需的依赖项更新 pom.xml 来解决,如此处所述就我而言,这完全是环境问题,并且出于某种原因,Docker Desktop 阻止 Tomcat 在运行时访问jams-api-2.3.1.jar文件。Tomcat 无法访问此 .jar 文件已通过上述问题中的“更新 2”得到确认。

我的 pom.xml 最终只需要以下项目: 在此输入图像描述