最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

最新評(píng)論

渝北区| 麻阳| 鲁甸县| 南召县| 寿光市| 绥德县| 太仆寺旗| 浦东新区| 新沂市| 肇源县| 大安市| 临夏县| 新野县| 温泉县| 宜兰市| 绥德县| 循化| 东丰县| 洱源县| 湖口县| 历史| 禹州市| 基隆市| 湟源县| 区。| 大安市| 泰安市| 大姚县| 揭西县| 盘锦市| 寿阳县| 海门市| 筠连县| 和平县| 乌鲁木齐市| 黎川县| 涿鹿县| 桃园市| 咸阳市| 会东县| 阳春市|