在 Tomcat9 上启动我的应用程序时遇到的具体错误。 Spring 版:5.1.5.RELEASE:
严重:配置类 [org.springframework.web.context.request.RequestContextListener] 的应用程序监听器时出错
java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceRef
关于这个错误有多个答案都建议添加 maven 依赖项。我添加了这些依赖项:
我的构建路径:
WebServiceRef
类位于包资源管理器中:
在 Tomcat9 上启动应用程序时,控制台会显示此错误。这是更多的堆栈跟踪:
严重:配置类 [org.springframework.web.context.request.RequestContextListener] 的应用程序监听器时出错
java.lang.NoClassDefFoundError: javax/xml/ws/WebServiceRef
在 org.apache.catalina.core.DefaultInstanceManager.populateAnnotationsCache(DefaultInstanceManager.java:303)
...更多的东西....
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.base/java.lang.reflect.Method.invoke(Method.java:566)
在 org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:355)
在 org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:495)
任何帮助或建议将不胜感激!
更新 1: 下面是一些 .jar 文件,它们被复制到 WEB-INF/lib 下的最终 .war 构建中。 4 个新的 maven 依赖项及其版本在这里,但也有可能重复的 .jar 文件。
更新 2: 将jaws-api jar 直接复制到我的Tomcat Classpath 中解决了运行时错误...所以应用程序现在正在启动,但是在实际部署.war 文件时我该如何克服这个问题?
最佳答案
这个问题归结为 Docker Desktop (Windows) 干扰了 Tomcat,特别是 Tomcat 的管理端口 8006,这迫使我更改端口号以允许 Tomcat 启动(从 8006 到例如 8007)。我曾经有一个旧的 Tomcat 容器,当我的计算机通过 Docker Desktop 启动时可能已经启动了,而我没有意识到这一点。
假设您的 pom.xml 具有必要的依赖项,已完成修复问题的步骤。
- 停止 Docker 桌面
- 使用最新的 JDK11 build并根据需要更新 JAVA_HOME
- 将默认的 Tomcat 管理服务器端口恢复为 8006
- 重新发布/重启 Tomcat 服务器
我认为在大多数情况下,此问题将按照 here 的说明解决。使用所需的依赖项更新 pom.xml。就我而言,这完全是环境问题,出于某种原因,Docker Desktop 阻止了 Tomcat 在运行时访问 jaws-api-2.3.1.jar 文件。 Tomcat 无法访问此 .jar 文件已通过我在上述问题中的“更新 2”得到确认。
关于java - 如何修复JDK11 Tomcat9 Spring Application上的JAVAX运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55346431/