ClassNotFoundException:如何查找Java中的依赖冲突

2024-02-20

在使用 Atmosphere servlet 的测试 WebSocket 应用程序中,我收到以下异常:

SEVERE: Servlet.service() for servlet AtmosphereServlet threw exception
java.lang.ClassNotFoundException: javax.servlet.AsyncContext
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
    at org.atmosphere.cpr.AtmosphereServlet.doPost(AtmosphereServlet.java:191)
    at org.atmosphere.cpr.AtmosphereServlet.doGet(AtmosphereServlet.java:177)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)

从下面的帖子中我了解到这可能是由 Servlet 容器版本早于 Servlet 3.0 引起的:

ClassNotFoundException:Jetty hello world 中的 javax.servlet.AsyncContext https://stackoverflow.com/questions/9037492/classnotfoundexception-javax-servlet-asynccontext-in-jetty-hello-world

ClassNotFoundException:eclipse 中 Jetty hello world 中的 javax.servlet.AsyncContext https://stackoverflow.com/questions/10715363/classnotfoundexception-javax-servlet-asynccontext-in-jetty-hello-world-in-eclip

Grails 项目 - Servlet 调用 - ClassNotFoundException:javax.servlet.AsyncContext https://stackoverflow.com/questions/22296126/grails-project-servlet-call-classnotfoundexception-javax-servlet-asyncconte

然而应用程序运行在Tomcat7上,并且在pom.xml中添加了以下依赖项:

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>

我检查了项目中的所有其他依赖项,但无法找到与 Servlet 相关的任何其他内容。我仍然遇到例外。

问题:如何找到应用程序实际使用的jar文件?如何找到导致使用旧版本的依赖关系?


我终于能够通过执行以下操作来解决依赖冲突。

为了找到应用程序使用的 jar 文件,我使用了下面的简单代码:

public void listJarFilesAndClassVersions() {    
    Class classToCheck = javax.servlet.ServletRequestWrapper.class;
    URL location = classToCheck.getResource('/'
        + classToCheck.getName().replace('.', '/') + ".class");

    System.out.println(location.toString());

    for(Package p : Package.getPackages()) {
        if (p.getName().startsWith("javax.servlet")) {
            System.out.println("Class: " + p.getName()
                + ", version: " + p.getSpecificationVersion());
        }
    }
}

班上javax.servlet.ServletRequestWrapper被选中是因为它确实存在于旧的小服务程序2.5.

上述脚本的执行给出了以下结果:

jar:file:/C:/Users/[username]/.m2/repository/org/apache/tomcat/servlet-api/6.0.29/servlet-api-6.0.29.jar!/javax/servlet/ServletRequestWrapper.class
Class: javax.servlet.jsp, version: 2.1
Class: javax.servlet, version: 2.5
Class: javax.servlet.http, version: null

所以,首先,确认使用的是2.5版本的Servlet,其次,“坏”的jar位于tomcat目录下的maven存储库中。

经过短暂的研究,我终于找到了根本原因:在部署和运行maven应用程序时,我需要指定tomcat的具体版本,否则maven使用版本6的tomcat中的库。所以对我来说修复是改变

mvn -Dmaven.tomcat.port=8080 tomcat:run-war

to

mvn -Dmaven.tomcat.port=8080 tomcat7:run-war

现在,如果我执行上面的脚本,它会给出以下结果:

jar:file:/C:/Users/[username]/.m2/repository/org/apache/tomcat/embed/tomcat-embed-core/7.0.47/tomcat-embed-core-7.0.47.jar!/javax/servlet/ServletRequestWrapper.class
Class: javax.servlet.jsp, version: 2.2
Class: javax.servlet, version: 7.0
Class: javax.servlet.http, version: 7.0
Class: javax.servlet.annotation, version: 7.0
Class: javax.servlet.descriptor, version: 7.0

希望它可以帮助遇到同样问题的其他人。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ClassNotFoundException:如何查找Java中的依赖冲突 的相关文章

随机推荐

  • Android人像相机可靠性

    我正在开发一个针对 SDK 8 的应用程序 最小 SDK 7 使用相机视图 显然 旋转相机拍摄肖像的问题已经引起了相当多的讨论 我目前有以下修复程序将 SDK 7 和 8 分开 if android os Build VERSION SDK
  • 如何在闪亮的应用程序中使用观察功能调整错误

    我想对下面的代码进行调整 请注意 我有两个输入选项 Excel and Database 如果你选择 input button Excel do data lt reactive Test 如果是input button database
  • 使用 boost Spirit 语法构建错误(boost 1.43 和 g++ 4.4.1)第三部分

    Ok 我正在尝试构建一个语法 目前它看起来像这样 ifndef INPUTGRAMMAR H define INPUTGRAMMAR H include
  • 如何在应用程序购买中设置自动续订以满足 Apple 准则?

    我有 2 个自动续订的应用内订阅正在接受 Apple 审核 但我一直被拒绝 请注意 这与 IAP 产品 显然尚未经过审查 无关 而是与我如何在 UI 中呈现信息有关 我永远无法让苹果明确说明如何克服拒绝 我上诉了一次 但再次被拒绝 尽管我确
  • 纯 HTML 中的彩色 SVG 在 React 中是全黑的。为什么?

    我在 Meteor 中使用 React 当我将 SVG 添加到 React 组件时 样式不会应用 但同样的代码在纯 HTML 中可以按预期工作 这是我的 SVG 代码
  • Google 地图 v3 API 扩展范围。 JavaScript 操作方法?

    function initialize Creating a map var map new google maps Map document getElementById map zoom 10 center new google map
  • Android:如何获取当前的前台活动(从服务)?

    有没有一种原生的 android 方法可以从服务获取对当前正在运行的 Activity 的引用 我有一个在后台运行的服务 我想在事件发生时 在服务中 更新我当前的活动 有没有一种简单的方法可以做到这一点 就像我上面建议的那样 Update
  • NSIS - 检查进程是否存在(nsProcess 不工作)

    对于我的 NSIS 卸载程序 我想检查进程是否正在运行 FindProcDLL 在 Windows 7 x64 下无法工作 所以我尝试了 nsProcess 我从网站下载了1 6版本 http nsis sourceforge net Ns
  • mongodb 按多个字段对值进行分组

    例如 我有这些文件 addr address1 book book1 addr address2 book book1 addr address1 book book5 addr address3 book book9 addr addre
  • 在asp.net中设置图像过期日期

    当我获得主机时 在 Visual Studio 和 IIS7 中使用 asp net 我有一个充满图标的文件夹 这些图标很少改变并且在每个页面上都使用 有没有一种方法可以将某个目录设置为每 2 个小时左右过期一次 这样我就可以减少对服务器的
  • 在 php 中使用数组查找百分位

    我有一个像这样的数组 array 45 gt 5 42 gt 4 9 48 gt 5 41 gt 4 8 40 gt 4 9 34 gt 4 9 这里的索引是userid而价值就是他的分数 现在我想要的是为用户实现百分位 例如 45 48
  • winapi:创建进程但隐藏进程的窗口?

    我正在使用 CreateProcess 创建一个 cmd exe 进程 该进程传递一个执行并退出的参数 这使得命令提示符在屏幕上闪烁 我试图通过将 STARTUPINFO struct wShowWindow 设置为 SW HIDE 来避免
  • C# 将变量复制到缓冲区而不产生垃圾?

    在 C Net 3 5 及更高版本 中是否可以将变量复制到 byte 缓冲区中 而不会在进程中创建任何垃圾 例如 int variableToCopy 9861 byte buffer new byte 1024 byte bytes Bi
  • 如何使用SharpDX绘制透明表面?

    这个问题是基于进一步调查this https stackoverflow com questions 28960993 hud basics using sharpdx how to draw over the screen surface
  • MICO Corba 的直接替代品?

    我们目前正在使用 MICO 建立服务器和客户端之间的通信 其中客户端是用 C 编写的模拟器 服务器是显示模拟中发生的动画的 java 程序 看来 MICO 的开发已经放缓到几乎停止的状态 并且只允许我们破解它们的错误 因为我们没有时间首先弄
  • Python(2.x)列表/子列表选择-1怪异

    所以我一直在玩Python并注意到一些看起来有点奇怪的事情 的语义 1从列表中选择似乎不一致 所以我有一个数字列表 ls range 1000 当然 列表的最后一个元素ls 1 但如果我获取其中的子列表 以便获得从中点到结尾的所有内容 我会
  • 如何防止在 kivy 应用程序中关闭 x 上的窗口

    有没有办法通过单击右上角的 x 直到满足特定条件来防止关闭kivy窗口 您可以通过绑定窗口来做到这一点on request close有一个函数来检查是否满足条件 from kivy app import App from kivy cor
  • RabbitMQ 中的并发

    经过一周的编码和搜索论坛后 似乎是时候问 我有一个 C 应用程序 它使用 EventingBasicConsumer 处理 RabbitMQ 发送的消息 我想同时处理多个消息 因此我在同一连接上实例化了几个通道 本例中为 8 个 每个通道都
  • 如何使用 jquery/ajax 将数据发送到 json 文件

    我发现了无数关于如何使用 jQuery 和 ajax 从 json 文件检索数据的教程 但没有关于如何将数据 POST 到 json 文件 如果有人可以向我展示或向我发送一个关于如何执行此操作的小脚本 那就太好了 我到处搜索如何做到这一点
  • ClassNotFoundException:如何查找Java中的依赖冲突

    在使用 Atmosphere servlet 的测试 WebSocket 应用程序中 我收到以下异常 SEVERE Servlet service for servlet AtmosphereServlet threw exception