欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Maven包沖突導(dǎo)致NoSuchMethodError錯(cuò)誤的解決辦法

 更新時(shí)間:2024年05月29日 08:55:16   作者:斯通  
web 項(xiàng)目 能正常編譯,運(yùn)行時(shí)也正常啟動(dòng),但執(zhí)行到需要調(diào)用 org.codehaus.jackson 包中的某個(gè)方法時(shí),產(chǎn)生運(yùn)行異常,這篇文章主要介紹了Maven包沖突導(dǎo)致NoSuchMethodError錯(cuò)誤的解決辦法,需要的朋友可以參考下

項(xiàng)目清況

項(xiàng)目中有兩個(gè)包都引用了jackson 的包且都是不再更新的版本

// jarA 包中引入 org.codehaus.jackson 包 1.8.4 版本
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.8.4</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.8.4</version>
</dependency>

//jar B 包中引入了 org.codehaus.jackson 包 1.9.13 版本
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>

//  org.codehaus.jackson  包最后在 2013 年的時(shí)候發(fā)生了組織變化(fastxml) ,且后續(xù)不再維護(hù)
// 如今正確使用jackson   應(yīng)該引入以下的 3 個(gè)包:
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.17.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.17.1</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.17.1</version>
</dependency>

從上面包中看得出,項(xiàng)目有些年代感了(springmvc 3.x 的版本,打包成war 部署運(yùn)行),本著能運(yùn)行的情況下,絕不隨意改動(dòng)的原則,還是繼續(xù)使用 org.codehaus.jackson 這個(gè)包

報(bào)錯(cuò)、異常

web 項(xiàng)目 能正常編譯,運(yùn)行時(shí)也正常啟動(dòng),但執(zhí)行到需要調(diào)用 org.codehaus.jackson 包中的某個(gè)方法時(shí),產(chǎn)生運(yùn)行異常:NoSuchMethodError:org.codehaus.jackson.map.ObjectMapper.setSerializationInclusion

找到報(bào)錯(cuò)處是 jarB 中的程序片段異常,找到對(duì)應(yīng)代碼中引用的包,定位后發(fā)現(xiàn)確實(shí)不存在這個(gè)方法,此時(shí)打開的是 1.8.4 的版本,(jarB 需要 1.9.13 版本的包)

處理沖突

找到問題了就好說,1.9與 1.8的版本應(yīng)該上線兼容,則采用 1.9 的版本即可, 那么我們只需要在 jarA 中排除掉 1.8.4 的jackson 應(yīng)該就能解決問題

<dependency>
    <groupId>org.china.xxxx</groupId>
    <artifactId>jarA</artifactId>
    <version>x.x.x</version>
    // 排除 ,jarA 中對(duì)低版本的引入
    <exclusion>
					<artifactId>jackson-core-asl</artifactId>
					<groupId>org.codehaus.jackson</groupId>
				</exclusion>
				<exclusion>
					<artifactId>jackson-mapper-asl</artifactId>
					<groupId>org.codehaus.jackson</groupId>
				</exclusion>
</dependency>

做了這個(gè)動(dòng)作之后發(fā)現(xiàn),項(xiàng)目中的已換成 1.9.13 版本

可以 使用 Maven Helper 工具來查看依賴沖突,exclude 包等

排除后充新編譯項(xiàng)目啟動(dòng)運(yùn)行,發(fā)現(xiàn)仍然

NoSuchMethodError:org.codehaus.jackson.map.ObjectMapper.setSerializationInclusion

進(jìn)一步探究

  • 編寫單元測(cè)試 方法調(diào)用,發(fā)現(xiàn)單元測(cè)試沒問題

說明問題出在 Tomcat, 編譯沒問題說明包引入正常(idea 中包依賴顯示正常,且跟蹤代碼也能找到正確的包) 問題應(yīng)該出在 ClassLoad → 類加在上

  • tomcat 啟動(dòng)項(xiàng) 增加 -XX:+TraceClassLoading -XX:+TraceClassUnloading tomcat 啟動(dòng)后發(fā)現(xiàn),jackson 仍然加載 1.8.4 的版本

  • 根據(jù)步驟 2 查看對(duì)應(yīng)的目錄發(fā)現(xiàn),存在多個(gè)版本的包(但低版本的我應(yīng)該排除掉了才對(duì)), 這個(gè)目錄在 idea 項(xiàng)目的 target目錄下 target/項(xiàng)目名稱/WEB-INF/lib

結(jié)合了解到tomcat 加載 lib 目錄下的包時(shí),會(huì)按照順序加在,且同樣的包只會(huì)加在一次,所以,這里應(yīng)該是優(yōu)先加在了 1.8.4 所以后續(xù)引入的 1.9 就被忽略

那么問題來了-》 dependency 中 exclusion 排除了 低版本的包,是怎么又出現(xiàn)在 lib 中的,

發(fā)現(xiàn)問題

最后仔細(xì)觀察 發(fā)現(xiàn) jarA 是作為父項(xiàng)目,引入到當(dāng)前項(xiàng)目中的

overlay 的資源會(huì)被覆蓋到當(dāng)前項(xiàng)目中,包括,WEB-INF 下的所有l(wèi)ib 這也是為什么在 lib 目錄下仍然存在 1.8.4 版本的包. 需要在 overlay 中也將相應(yīng)的包剔除

...
<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-war-plugin</artifactId>
					<version>2.2</version>
					<configuration>
						<overlays>
							<overlay>
								<groupId>com.unionman</groupId>
								<artifactId>unionmanframe</artifactId>
								<excludes>
									<exclude>**/jackson-core-asl-1.8.4.jar</exclude>
									<exclude>**/jackson-mapper-asl-1.8.4.jar</exclude>
								</excludes>
							</overlay>
						</overlays>
					</configuration>
	</plugin>
	...

最后再次啟動(dòng),類正常加載 jackson-1.9.13 包

以上就是Maven包沖突導(dǎo)致NoSuchMethodError錯(cuò)誤的解決辦法的詳細(xì)內(nèi)容,更多關(guān)于Maven導(dǎo)致NoSuchMethodError的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JAVA項(xiàng)目如何打包部署到Linux服務(wù)器上

    JAVA項(xiàng)目如何打包部署到Linux服務(wù)器上

    本文詳細(xì)介紹了在服務(wù)器上部署環(huán)境包括JDK、MySQL、Tomcat的設(shè)置,以及使用Idea-Maven-SpringBoot進(jìn)行jar包打包部署的流程,內(nèi)容涵蓋了MySQL配置注意事項(xiàng)、pom.xml配置、打包命令等關(guān)鍵步驟,同時(shí),也提供了如何將jar包上傳到Linux服務(wù)器并運(yùn)行的具體方法
    2024-10-10
  • java對(duì)象對(duì)比之comparable和comparator的區(qū)別

    java對(duì)象對(duì)比之comparable和comparator的區(qū)別

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著comparable和comparator的區(qū)別展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 解決javaWEB中前后臺(tái)中文亂碼問題的3種方法

    解決javaWEB中前后臺(tái)中文亂碼問題的3種方法

    這篇文章主要介紹了解決javaWEB中前后臺(tái)中文亂碼問題的3種方法,中文問題一直是很多人難以解決的問題,對(duì)這方面感興趣的朋友可以參考一下
    2015-11-11
  • Java使用icepdf將pdf文件按頁(yè)轉(zhuǎn)成圖片

    Java使用icepdf將pdf文件按頁(yè)轉(zhuǎn)成圖片

    這篇文章主要為大家詳細(xì)介紹了Java使用icepdf將pdf文件按頁(yè)轉(zhuǎn)成圖片,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • 淺析對(duì)Java關(guān)鍵字final和static的理解

    淺析對(duì)Java關(guān)鍵字final和static的理解

    本文主要給大家談?wù)勑【帉?duì)java關(guān)鍵字final和static的理解,本文給大家介紹的較詳細(xì),需要的朋友參考參考下
    2017-04-04
  • java的io操作(將字符串寫入到txt文件中)

    java的io操作(將字符串寫入到txt文件中)

    這篇文章主要介紹了java的io操作示例,將字符串寫入到txt文件中,需要的朋友可以參考下
    2014-04-04
  • springboot 接口版本區(qū)分方式

    springboot 接口版本區(qū)分方式

    這篇文章主要介紹了springboot 接口版本區(qū)分方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • 詳解Java中方法重寫和方法重載的6個(gè)區(qū)別

    詳解Java中方法重寫和方法重載的6個(gè)區(qū)別

    方法重寫和方法重載都是面向?qū)ο缶幊讨校敲捶椒ㄖ貙懞头椒ㄖ剌d有哪些區(qū)別,本文就詳細(xì)的來介紹一下,感興趣的可以了解一下
    2022-01-01
  • java編寫貪吃蛇小游戲

    java編寫貪吃蛇小游戲

    貪吃蛇是經(jīng)典手機(jī)游戲,既簡(jiǎn)單又耐玩。通過控制蛇頭方向吃蛋,使得蛇變長(zhǎng),從而獲得積分。今天我們就來用java來實(shí)現(xiàn)下貪吃蛇小游戲,有需要的小伙伴可以參考下
    2015-03-03
  • SpringCloud?Gateway之請(qǐng)求應(yīng)答日志打印方式

    SpringCloud?Gateway之請(qǐng)求應(yīng)答日志打印方式

    這篇文章主要介紹了SpringCloud?Gateway之請(qǐng)求應(yīng)答日志打印方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03

最新評(píng)論