1. 程式人生 > >jar包衝突及解決步驟

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>