【问题标题】:How to fix JAVAX runtime error on JDK11 Tomcat9 Spring Application如何修复JDK11 Tomcat9 Spring Application上的JAVAX运行时错误
【发布时间】:2023-03-23 12:08:01
【问题描述】:

在 Tomcat9 上启动我的应用程序时遇到的具体错误。春季版:5.1.5.RELEASE:

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

关于这个错误有多个答案都建议添加 maven 依赖项。我添加了这些依赖项:

我的构建路径:

WebServiceRef 类位于包资源管理器中:

在 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: 将jaws-api jar 直接复制到我的Tomcat 类路径中解决了运行时错误...所以应用程序现在正在启动,但是在实际部署.war 文件时我该如何克服这个问题?

【问题讨论】:

  • 能否请您通过mvn help:effective-pom显示您的有效pom.xml
  • 很大,里面有没有你特别要找的东西?
  • 我正在寻找导致您的 jaxb 无法进入最终 *.jar*.war* 的状态的覆盖。您能否交叉检查上述依赖项是否真的存在于您最终捆绑/打包的工件中?
  • 我更新了我的问题,截图显示了构建后复制到 .war 文件中的一些内容。
  • 嗯...看起来不错。下一个方法:尝试将提到的四个库直接复制到 Tomcat 的 lib 文件夹中,看看发生了什么。

标签: java spring maven docker tomcat


【解决方案1】:

尝试在您的 pom.xml 中使用此依赖项:

<dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>javax.annotation-api</artifactId>
    <version>1.3.2</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.4.0-b180725.0427</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.4.0-b180725.0644</version>
</dependency>

我刚刚尝试过,它适用于 tomcat 9 和 spring 5.1.5

【讨论】:

【解决方案2】:

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

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

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

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

我的 pom.xml 最终只需要以下项目:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-31
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多