关于jar包版本maven依赖冲突解决问题如何解决,求教大神

maven jar包冲突问题
在maven偶同时引用了 spring-core和spring 两个jar包
导致启动时出现
严重: StandardWrapper.Throwable java.lang.NoSuchMethodError: org.springframework.core.io.ResourceEditor.&init&(Lorg/springframework/core/io/ResourceLLorg/springframework/core/env/PropertyR)V && &at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:126) && &at javax.servlet.GenericServlet.init(GenericServlet.java:160) && &at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280) && &at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193) && &at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088) && &at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5176) && &at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5460) && &at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) && &at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) && &at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) && &at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) && &at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1113) && &at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1671) && &at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) && &at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) && &at java.util.concurrent.FutureTask.run(FutureTask.java:138) && &at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) && &at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) && &at java.lang.Thread.run(Thread.java:695)
18:27:30 org.apache.catalina.core.StandardContext loadOnStartup
请大神指教,两个jar包都必须存在 否则又会有很多奇怪的问题!
用eclipse打开pom文件,在package h....视图查找冲突的包,然后右键有个添加不包含的选项
--- 共有 2 条评论 ---
: 请问如何解决 十分感谢
已经解决了 谢谢了IntelliJ IDEA查寻依赖关系,解决jar包冲突 - 开源软件当前位置:& &&&IntelliJ IDEA查寻依赖关系,解决jar包冲突IntelliJ IDEA查寻依赖关系,解决jar包冲突&&网友分享于:&&浏览:300次IntelliJ IDEA查找依赖关系,解决jar包冲突
maven工程,一个artifact的jar包可能不只一处被依赖;有时候依赖会出现相同的artifact却不同版本,相互存在冲突,这时就需要exclude某个版本。
试了在命令行工程目录下执行mvn dependency:tree可以出来文本的依赖关系,但是不会把一个artifact的每处依赖都显示出来,只会出现第一次被依赖的地方。
使用eclipse的都知道,如果要查看一个jar包是如何被依赖进来的,可以打开工程的pom.xml,切换到dependency hierarchy视图,然后右上角Filter输入artifactId就可以清晰地看到它是如何被直接或间接地依赖进来的;找到了就容易到pom文件里排除冲突包的引入了。
IntelliJ IDEA,该如何找某个artifact的全部依赖关系?
该工具有个Maven Projects窗口,一般在右侧能够找到,如果没有可以从菜单栏打开:View&Tool Windows&Maven P
选择要分析的maven module(idea的module相当于eclipse的project),右击show dependencies,会出来该module的全部依赖关系图,非常清晰细致。
在图里选中一个artifact,则所有依赖该artifact的地方都会一起连带出来突出显示,如果有不同版本的也会标记出来。这样该artifact在该工程里是如何被直接或间接引入的进来也就明朗了。
如果有冲突的版本,可以右击该版本的节点然后Exclude,对应的pom.xml就已经成功修改了。(IntelliJ IDEA对于文件的修改都是实时保存的,无须Ctrl+S)
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有3552人阅读
Java(17)
jar包冲突几乎是每个java程序员都会遇到的问题,而且特别是大工程,jar包各种依赖,经常性发生包冲突。通常会报这样几个运行时异常:
java.lang.NoSuchMehodErrorjava.lang.NoClassDefFoundError
这类问题十有八九都是jar包冲突引起,要解决jar包冲突问题,我们先了解下导致这个冲突的原因。
导致jar包冲突的原因
1、mvn的传递依赖特性:mvn编译打包除了会引入直接申明的依赖,还会引入间接申明的依赖
2、mvn的依赖仲裁规则:
& & 1). 按照项目总控POM的DependencyManager版本声明进行仲裁。
& & 2). 如无仲裁声明,则按照依赖最短路径确定版本。
& & 3). 若相同路径,有严格区间限定的版本优先。
& & 4). 若相同路径,无版本区间,则按照先入为主原则。
3、依赖的scope会影响依赖的影响范围。
简单冲突解决的三途径!
1、根据报错的class名或方法名定位到可能导致冲突的jar包,jar包冲突引入有几种情况:
& & 1). &引入了这个jar包的多个版本,而mvn仲裁的时候取了错误的版本,这个版本本身就缺少正确的class或方法。
& & 2). &引入了不同坐标但是具有同名class的多个jar,mvn加载class的顺序差异会导致加载到错误的class。
2、通过mvn dependency:tree && &tree.txt 导出全部的依赖。 可以使用 -Dverbose 、-Dincludes或者-Dexcludes参数来精确定位导致冲突的jar包。&
3、找到需要排除的依赖jar包,通过mvn仲裁优先的方法定义正确的jar包,或者通过exclusion的方式排除错误的jar包。
4.温馨提示:另外在项目开发中jar尽量按需引入,系统管理起来,别什么都不管直接加包进来,这样也可以在一定程度上减少jar包冲突的风险。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:46563次
积分:1225
积分:1225
排名:千里之外
原创:75篇
转载:22篇
评论:14条
(3)(1)(3)(3)(13)(23)(6)(4)(1)(5)(7)(12)(9)(4)(3)}

我要回帖

更多关于 jar 依赖冲突 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信