栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

为了找到应用程序使用的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 ,因为它确实存在于旧的 Servlet 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.classClass: javax.servlet.jsp, version: 2.1Class: javax.servlet, version: 2.5Class: javax.servlet.http, version: null

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

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

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

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.classClass: javax.servlet.jsp, version: 2.2Class: javax.servlet, version: 7.0Class: javax.servlet.http, version: 7.0Class: javax.servlet.annotation, version: 7.0Class: javax.servlet.descriptor, version: 7.0

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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/386522.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号