jakarta-ee - 如何避免 WebappClassLoader.findResources 中的 NullPointerException?

标签 jakarta-ee tomcat maven

当使用 manager-app 重新部署特定的 webapp 时,由于 WebappClassLoader.findResources(下面的 Stacktrace),下一次调用会导致“NullPointerException”。重启 tomcat 后,应用程序将顺利运行。

翻遍网络,这个问题似乎很普遍,但没有具体的解决方案。对我来说,这只是在部署一个特定的网络应用程序时引起的。与某些邮件列表相关,它可能是一个包含在 shared/libs/中但不应该包含在/WEB-INF/libs/中的 jar(例如 axis.jar)

为了构建和部署我使用 maven 的 webapp,它适用于所有其他应用程序,但这个应用程序除外。本项目的项目配置与其他项目没有区别。

我可以做一些事情来找出 tomcat“崩溃”的原因吗?!有人有解决这个问题的想法吗?!

java.lang.NullPointerException
    at org.apache.catalina.loader.WebappClassLoader.findResources(WebappClassLoader.java:1245)
    at java.lang.ClassLoader.getResources(ClassLoader.java:1041)
    at org.apache.commons.discovery.jdk.JDK12Hooks.getResources(JDK12Hooks.java:150)
    at org.apache.commons.discovery.resource.DiscoverResources$1.getNextResources(DiscoverResources.java:153)
    at org.apache.commons.discovery.resource.DiscoverResources$1.getNextResource(DiscoverResources.java:129)
    at org.apache.commons.discovery.resource.DiscoverResources$1.hasNext(DiscoverResources.java:116)
    at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.getNextClassNames(DiscoverNamesInFile.java:186)
    at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.getNextClassName(DiscoverNamesInFile.java:170)
    at org.apache.commons.discovery.resource.names.DiscoverNamesInFile$1.hasNext(DiscoverNamesInFile.java:157)
    at org.apache.commons.discovery.resource.names.NameDiscoverers$1.getNextIterator(NameDiscoverers.java:143)
    at org.apache.commons.discovery.resource.names.NameDiscoverers$1.hasNext(NameDiscoverers.java:126)
    at org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl$1.getNextResource(ResourceClassDiscoverImpl.java:159)
    at org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl$1.hasNext(ResourceClassDiscoverImpl.java:147)
    at org.apache.axis.configuration.EngineConfigurationFactoryFinder$1.run(EngineConfigurationFactoryFinder.java:120)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:113)
    at org.apache.axis.configuration.EngineConfigurationFactoryFinder.newFactory(EngineConfigurationFactoryFinder.java:160)
    at org.apache.axis.client.Service.getEngineConfiguration(Service.java:813)
    at org.apache.axis.client.Service.getAxisClient(Service.java:104)
    at org.apache.axis.client.Service.<init>(Service.java:113)

最佳答案

我已经看到在您的 Tomcat/lib 文件夹中包含 commons-discovery.jar 时会出现此问题。

如果您将 commons-discovery.jar 用于项目特定目的,请将其放在项目的 WEB-INF/lib 文件夹中,而不是 Tomcat/lib 文件夹中,这应该可以解决您的问题。

这是一个部署问题,而不是 Tomcat 问题。

关于jakarta-ee - 如何避免 WebappClassLoader.findResources 中的 NullPointerException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7482503/

相关文章:

maven - Jmeter- NonGUIDriver java.lang.IllegalArgumentException 中的错误

Java7 类格式错误 : Illegal local variable table length while creating the object

tomcat - 确定 Tomcat 中正在运行的服务使用 100% cpu 使用率

tomcat - 如何使用匿名 diffie-hellman 算法为服务器生成证书或 keystore

java - 面对tomcat的部署问题

java - maven-shade-plugin 和单例

java - JPA REQUIRES_NEW 事务到底什么时候提交

java - 如何在 DDD 中嵌套实体

java - 查询 Terracotta

maven - Gradle 发布插件,将版本存储在 build.gradle 中