jar包衝突及解決步驟
轉載:https://www.cnblogs.com/godtrue/p/6220512.html
報錯資訊
十二月 14, 2016 7:52:34 下午 org.apache.catalina.core.ContainerBase addChildInternal
嚴重: ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component
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 org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)
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:1571)
... 68 more
分析過程
問題的分析思路:
根據提示“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:成功了耶!到這裡是不是有點小興奮,畢竟我們的價值多數是源自我們解決的問題!
解決jar包衝突四個原則
轉載:https://blog.csdn.net/guo13313/article/details/73143909?utm_source
一、第一宣告優先原則
示例:
<dependencies>
<!-- spring-beans-4.2.4 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<!-- spring-beans-3.0.5 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
</dependency>
二、路徑近者優先原則
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
三、排除原則
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.24</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</exclusion>
</exclusions>
</dependency>
四、版本鎖定原則
<properties>
<spring.version>4.2.4.RELEASE</spring.version>
<hibernate.version>5.0.7.Final</hibernate.version>
<struts.version>2.3.24</struts.version>
</properties>
<!-- 鎖定版本,struts2-2.3.24、spring4.2.4、hibernate5.0.7 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
</dependencyManagement>