您的位置:首页 > 其它

Maven依赖版本冲突的分析及解决小结

2017-06-22 10:20 561 查看
Maven依赖版本冲突的分析及解决小结

1:前言
      做软件开发这几年遇到了许多的问题,也总结了一些问题的解决之道,之后慢慢的再遇到的都是一些重复性的问题了,当然,还有一些自己没有完全弄明白的问题。如果做的事情是重复的,遇到重复性问题的概率也就会比较多了,如果是在一个新的领域里玩,遇到的问题又都是新的,自己从来没有见过的,但是问题的解决思路基本是类似的。下面这个问题,我觉得值得一记,因为以后还会再遇到类似的,我希望自己能很快的将其解决掉。
2:报错信息
     如下是更新项目后,启动项目时抛出的部分错误信息。
十二月 14, 2016 7:52:34 下午 org.apache.catalina.core.ContainerBase addChildInternal

严重: ContainerBase.addChild: start: 

org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)

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:652)

at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1779)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)

at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)

at com.sun.j
4000
mx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1487)

at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:97)

at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1328)

at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1420)

at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:848)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:322)

at sun.rmi.transport.Transport$1.run(Transport.java:177)

at sun.rmi.transport.Transport$1.run(Transport.java:174)

at java.security.AccessController.doPrivileged(Native Method)

at sun.rmi.transport.Transport.serviceCall(Transport.java:173)

at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:556)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:811)

at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:670)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.NoClassDefFoundError: org/springframework/core/env/EnvironmentCapable

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:800)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)

at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)

at java.lang.ClassLoader.defineClass1(Native Method)

at java.lang.ClassLoader.defineClass(ClassLoader.java:800)

at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)

at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)

at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)

at java.lang.Class.getDeclaredFields0(Native Method)

at java.lang.Class.privateGetDeclaredFields(Class.java:2499)

at java.lang.Class.getDeclaredFields(Class.java:1811)

at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:106)

at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:270)

at org.apache.catalina.startup.WebAnnotationSet.loadApplicationListenerAnnotations(WebAnnotationSet.java:89)

at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:63)

at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:415)

at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:892)

at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)

at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)

at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)

at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5416)

at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)

... 40 more

Caused by: java.lang.ClassNotFoundException: org.springframework.core.env.EnvironmentCapable

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)

at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)

... 68 more
十二月 14, 2016 7:52:34 下午 org.apache.tomcat.util.modeler.BaseModelMBean invoke

严重: Exception invoking method manageApp

java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]

at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904)

at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)

at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)

at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1779)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)

at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:618)

at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:565)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)

at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)

at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)

at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1487)

at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:97)

at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1328)

at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1420)

at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:848)
3:分析过程
     这类问题,我总结过多次,思路每次基本类似。如果是熟悉的,一看就知道哪里出问题了?如果是不熟悉的,就需要好好看看报错信息了,从自己编写的代码中找找出错的地方在哪里?如果也不熟悉,也找不到自己编写的相关代码,只能看看网上有没有其他同学遇到和解决过类的问题了。如果还是找不到问题的所在,就只能麻烦一下身边的同事帮忙看看了,多一个人多一种思路,说不定问题很快就能找到,并解决了。
     下面是我对这个问题的分析思路:
3-1:根据引起问题的提示“Caused by: java.lang.ClassNotFoundException: org.springframework.core.env.EnvironmentCapable”,看看能否找到对应的类,如下所示:



3-2:根据上图(3-1)的自我问答,看看我们的项目中依赖的jar文件是否正确,如下所示,确实是存在问题的,随后我们会发现,这个依赖的jar文件中确实没有我们使用的类。



3-3:我们确认一下自己的分析,看看对应的类是否存在于我们依赖的jar文件之中,如下图所示,确实是没有的。



3-4:通过如下图所示的方式,我们到对应的pom文件的依赖处,看看依赖的情况。



3-5:因为传递依赖导致了依赖版本的冲突,我们需要通过exclusion标签排除对应的传递依赖,试试看能否解决对应的问题



3-6:然后我们再次查看项目的依赖,确认我们的项目现在的依赖是没问题的



3-7:重新启动项目后,还是报错,我们只能再次的分析一下这个错误是怎么回事了,思路如上就不在重提了。



3-8:先看看引起错误的类是否存在,如下所示是存在的,不过却是在两个jar文件之中的,这让我首先想到可能还是传递依赖导致的依赖版本有冲突的问题



3-9:根据我们的怀疑,我们就看看我们的项目依赖jar文件是哪个吧!果然,还是低的版本!



3-10:那我们就再次的通过exclusion标签排除一下,试试吧!



3-11:成功了耶!到这里是不是有点小兴奋,毕竟我们的价值多数是源自我们解决的问题!



 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: