1. 程式人生 > >Maven依賴版本衝突的分析及解決小結

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.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)
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:成功了耶!到這裡是不是有點小興奮,畢竟我們的價值多數是源自我們解決的問題

相關推薦

Maven依賴版本衝突分析解決小結

1:前言       做軟體開發這幾年遇到了許多的問題,也總結了一些問題的解決之道,之後慢慢的再遇到的都是一些重複性的問題了,當然,還有一些自己沒有完全弄明白的問題。如果做的事情是重複的,遇到重複性問題的概率也就會比較多了,如果是在一個新的領域裡玩,遇到的問題又都是新的,自己從來沒有見過的,但是問題的解決思

SpringBoot-MongoDB 索引衝突分析解決

一、背景 spring-data-mongo 實現了基於 MongoDB 的 ORM-Mapping 能力, 通過一些簡單的註解、Query封裝以及工具類,就可以通過物件操作來實現集合、文件的增刪改查; 在 SpringBoot 體系中,spring-data-mongo 是 MongoDB Java 工具

Maven依賴範圍和依賴版本衝突解決

一、依賴範圍1. Compile  struts2-core編譯(compile)時需要 測試時需要,,執行時需要,打包時需要2. Provided  jsp-api.jar   servlet-api

Flutter | 如何優雅的解決依賴版本衝突

https://www.jianshu.com/p/3af57fbb7efe 前言 Google推出flutter這樣一個新的高效能跨平臺(Android,ios)快速開發框架之後,被業界許多開發者所關注。我在接觸了flutter之後發現這個確實是一個好東西,好東西當然要和大家分享,對吧。

Android依賴版本衝突的一個解決方法

問題簡介 講真對Gradle瞭解不是很深,在網上看了很多解決依賴衝突的文章還是很懵逼,重要是問題依然無法解決。病急亂投醫,在StackOverflow上找到個答案問題解決了,雖然不是很懂。這裡相當於記錄一下,希望也對別人有用。 問題描述 我在新增上on

程式集引用版本衝突問題的解決辦法:合併依賴

最近在 做 MailChimp 與網站功能 整合時,發現 MailChimp 2API 中的 MailChimp.dll  中的依賴項 SerivceStack.Text.dll (版本為3.9.71.0)與我們WebSite 中的 ServiceStack.Text.dl

Idea解決maven依賴衝突問題

拿我遇到的問題來說一下,公司的專案,使用elasticsearch做索引,在實際專案啟動中它的Netty4Utils工具類初始化,所用到的類報NoSuchMethodError。直接搜尋一下這個類,發現在專案下起碼引入了三個版本的netty,分別是:4.0.24、4.029、4.1.7。我查了具體在使用net

使用sso(cas)的時候報單點登錄service不匹配問題分析解決

amp 多個 cas query xxx code util match 新版 最近在使用portal做企業門戶網站,其中使用了sso。在集成了多個應用之後在portal中點擊集成的應用報錯 2017-05-31 08:37:16,950 ERROR [org.jasig.

AppStore IPv6-only審核被拒原因分析解決方案

穩定 eip ios 穩定性 only 應用服務器 http 一個 搭建 AppStore IPv6-only審核被拒原因分析及解決方案 http://www.jianshu.com/p/8edfdfa20b29 自2016年6月1日起,蘋果要求所有提交App St

安裝M版本錯誤問題解決

openstack1. openstack認證?大多數情況下openstack認證後來都會報錯,建議在到達生成一個隨機值在初始的配置中作為管理員的令牌時,不操作這一步,在後期的配置文件中直接修改admin_token即可。比如配置admin_token=1234567890。【問題描述】openstack認

Core 2.0 的dll實時更新、https、依賴包變更問題解決

runt cert 以及 rip cto onf 是把 文件夾 系統 今天所有開發環境已經遷移到mac OS下的Visual Studio Code + 命令行編譯發布,而運行服務器是CentOS7,和windows沒什麽關聯了。 只要你Relese編譯並在本地有一個

MYSQL主從不同步延遲原理分析解決方案

run 步長 syn class ati 可能 16px 一點 表示 1.網絡的延遲由於mysql主從復制是基於binlog的一種異步復制,通過網絡傳送binlog文件,理所當然網絡延遲是主從不同步的絕大多數的原因,特別是跨機房的數據同步出現這種幾率非常的大,所以做讀寫分離

full gc頻繁的分析解決案例

過大 heap times 正常的 出現 結構 lec 收集器 max full gc頻繁的分析及解決案例2016-04-14 09:20:54 0個評論 來源:end‘s coding life 收藏 我要投稿 現象 ? 1

windows server,nginx安裝,配置,運行nodeJS後端的web項目的實現,以及錯誤分析解決方法

lease args app clu ali real-ip directory 很多 命令 如果對nodeJS的後端的系統,源代碼在github上,https://github.com/saucxs/nodeJSBlog ,如果覺得可以,請請star並fork項目 項目

ORA600[13011]表與索引數據邏輯錯誤分析解決

-s tool stats color 重建索引 report ror zh-cn put 一、問題概述1、數據庫環境:Oracle Database 11.2.0.3.0 for Oracle Linux Server release 6.4,RAC,虛擬機 2、巡檢時發

MySQL Err 1418 的原因分析解決方法

mysql 1418 MySQL的有個參數log_bin_trust_function_creators,官方文檔對這個參數的介紹、解釋如下所示: This variable applies when binary logging is enabled. It controls whether st

tomcat無法正常關閉問題分析解決

x64 second catch 監聽 files 執行 發現 int find 問題描述 通常,我們都會直接使用tomcat提供的腳本執行關閉操作,如下: # sh bin/shutdown.sh Using CATALINA_BASE: /usr/local/a

轉載:oracle執行update語句時卡住問題分析解決辦法

oracle執行update語句時卡住問題分析及解決辦法  這篇文章主要介紹了oracle執行update語句時卡住問題分析及解決辦法,涉及記錄鎖等相關知識,具有一定參考價值,需要的朋友可以瞭解。 問題 開發的時候debug到一條update的sql語句時程式就不動了,然後我就

Maven JAR包問題排查解決方案

前言 寫這篇文章的初衷是因為今天在使用mvn dependency:tree命令時,突然想起一年前面試阿里的一道面試題。面試題是說假設線上發生JAR包衝突,應該怎麼排查?我那時候的回答是IDEA有個Maven Helper的外掛,可以幫忙分析依賴衝突,然後還有一種辦法是如果一個類import的時

IBM WebSphere Portal宕機或效能低常見問題分析 解決措施

使用IBM WebSphere Portal構建企業門戶系統是使用者比較睿智的一個選擇,但是由於Portal產品比較複雜,宕機或效能低也通常是使用者較為頭疼的問題。經常有客戶門戶上線後出現頁面空白或無法訪問,甚至宕機的問題,令人頭疼不已。本文以IBM Portal常見效能低下或宕機的常見原因分析,並以筆者