1. 程式人生 > >maven解決jar衝突除錯步驟

maven解決jar衝突除錯步驟

錯誤日誌:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in ServletContext resource [/WEB-INF/spring/tbm_web_shiro.xml]: Cannot resolve reference to bean 'securityManager' while setting bean property 'securityManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityManager' defined in ServletContext resource [/WEB-INF/spring/tbm_web_shiro.xml]: Cannot resolve reference to bean 'myRealm' while setting bean property 'realm'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myRealm' defined in ServletContext resource [/WEB-INF/spring/tbm_web_shiro.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.topsec.tbm.web.auth.TbmRealm]: Constructor threw exception; nested exception is java.lang.NoSuchMethodError: javassist.util.proxy.ProxyFactory.setUseCache(Z)V

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) ~[spring-beans-4.0.1.RELEASE.jar:4.0.1.RELEASE]

at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) ~[spring-beans-4.0.1.RELEASE.jar:4.0.1.RELEASE]

原因:jar衝突

org.apache.struts:struts2-core:jar:2.3.16自動引入了javassist:javassist:jar:3.11.0.GA

自己開發的系統中使用了:org.javassist:javassist:jar:3.18.1-GA

檢視這兩個jar中的class基本上一樣。這兩個jar分別屬於不同的group.

看看maven定義:

struts自動引入的jar是這個maven定義:

<dependency>

    <groupId>javassist</groupId>

    <artifactId>

javassist</artifactId>

</dependency>

而專案中使用的是:

<dependency>

    <groupId>org.javassist</groupId>

    <artifactId>javassist</artifactId>

</dependency>

解決辦法:mavnen引入strtus時排出javassist這個jar

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <exclusions>
        <exclusion>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
        </exclusion>
    </exclusions>
</dependency>

擴充套件:

排除這個錯誤的方法:

1.使用ctrl+shift+T 查一下這個類的出處:


2.使用mvn dependency:copy-dependencies命令,這樣將在pom.xml所在的目錄下生成target\dependency目錄。

3.檢視步驟2中的目錄可以看到有這個javassist.jar有兩個不同版本的jar,為什麼會有兩個這種jar呢?檢視一下引用樹吧。

4.使用命令mvn dependency:tree > 1.txt輸出下引用的目錄結構

[INFO] +- org.apache.struts:struts2-core:jar:2.3.16:compile

[INFO] |  +- org.apache.struts.xwork:xwork-core:jar:2.3.16:compile

[INFO] |  |  +- asm:asm:jar:3.3:compile

[INFO] |  |  \- asm:asm-commons:jar:3.3:compile

[INFO] |  |     \- asm:asm-tree:jar:3.3:compile

[INFO] |  +- org.freemarker:freemarker:jar:2.3.19:compile

[INFO] |  +- ognl:ognl:jar:3.0.6:compile

[INFO] |  |  \- javassist:javassist:jar:3.11.0.GA:compile

......

[INFO] +- org.hibernate:hibernate-core:jar:4.3.3.Final:compile

[INFO] |  +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile

[INFO] |  +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile

[INFO] |  +- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.0.0.Final:compile

[INFO] |  +- dom4j:dom4j:jar:1.6.1:compile

[INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile

[INFO] |  +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.4.Final:compile

[INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile

[INFO] |  +- org.javassist:javassist:jar:3.18.1-GA:compile

5.使用maven的exclusion排除干擾的jar.

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <exclusions>
        <exclusion>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
        </exclusion>
    </exclusions>
</dependency>

相關推薦

maven解決jar衝突除錯步驟

錯誤日誌: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'shiroFilter' defined in ServletContext reso

Maven 解決Jar包版本衝突

今天遇到一個小問題。在使用apache-commons-codec包進行編碼/解碼的時候,用到了Base64類的decodeBase64(String base64String)方法,這個方法在1.4版中才提供。而我們的工程中對codec存在兩個

【詳】Maven解決jar衝突方案(親身測試)

Maven開發中jar衝突最令人頭疼: [INFO] Scanning for projects... [ERROR] [ERROR] Some problems were encountered while processing the POMs: [WARNING] 'depen

Maven解決jar衝突

在使用Maven時,經常會遇到jar包衝突的問題,解決辦法: 在pom.xml檔案中使用maven的exclusions工具,語法如下: 避免hadoop-client-2.2.0.jar引入hado

Maven解決jar包依賴衝突

使用maven最煩人的可能就是類包之間的版本衝突引發的問題了,類包衝突的一個很大的原因即產類包之間的間接依賴引起的。每個顯式宣告的類包都會依賴於一些其它的隱式類包,這些隱式的類包會被maven間接引入進來,因而可能造成一個我們不想要的類包的載入,嚴重的甚至會引起類包之間的衝突。 要解決這個問題,首先就是要檢視

Maven 解決jar衝突的原理

管理包依賴是 Maven 核心功能之一,下面通過如何引入 jar 包;如何解析 jar 包依賴;包衝突是如何產生;如何解決包衝突;依賴管理解決什麼問題;什麼是依賴範圍;使用包依賴的最佳實踐等 6 個問題來介紹。 如何引入 jar 包 在程式碼開發時,如果需要使用第三方 jar 包提供的類庫,那麼需要在 pom

maven解決jar包版本衝突

Maven對於新手來說是《步步驚心》,因為它包羅永珍,博大精深,因為當你初來乍到時,你就像一個進入森林的陌生訪客一樣迷茫。 Maven對於老手來說是《真愛配方》,因為它無所不能,利如刀鋒,使用Maven做開發,如飲美酒如悅美人。 Maven對於新手來說,最痛苦的一件事莫過於

maven 解決依賴衝突 omiit for conflict

maven依賴衝突,原因: 衝突寫法如下: <dependency> <groupId>org.apache.httpcomponents</groupId> <ar

10.idea中如何解決mavenjar版本衝突問題

什麼時候會出現jar包版本衝突問題呢,如下 比如當你自己依賴的spring版本是5.0.4而依賴的spring版本是更低的(這裡可以看到是2.5.6如下)的時候要怎樣解決jar版本衝突 呢?(這裡其實兩個spring不衝突,看字尾,只是舉個例子) 此時可以在pom檔案中右鍵d

maven】排除mavenjar包依賴的解決過程 例子:spring cloud啟動zipkin,報錯maven依賴jar衝突 Class path contains multiple SLF4J bindings.

一直對於maven中解決jar包依賴問題的解決方法糾結不清: 下面這個例子可以說明一個很簡單的解決方法:     專案啟動報錯: Connected to the target VM, address: '127.0.0.1:59412', transport: 'sock

mavenjar衝突-記一次衝突解決

1、請到pom.xml檔案所在的目錄(包含父子目錄)下分別執行下面的命令排查是什麼原因導致fastjson版本不正確: mvn dependency:tree -Dverbose -Dincludes=com.alibaba:fastjson 2、配合excusions標籤排除過時的包 &n

maven專案jar衝突解決方案

上圖中顯示的是servlet2.3而不是3.0。 解決方法:        網上都說servlet-api衝突是因為專案部署的時候WEB-INFO/lib下面的servlet-api和servlet中的servlet-api產生衝突,其實我的不然。因為我的專案是用maven管理的,在pom.

怎麼解決maven管理jar衝突問題

maven管理jar包依賴的時候,假如你的依賴包A需要間接依賴B的1.0版本,而你的工程裡又需要用到B的2.0版本,這個時候就可能會出現執行時jar衝突的異常,會報java.lang.NoSuchMethodError 或者 java.lang.ClassNotFoundE

maven工具解決jar衝突問題或重複載入問題

在使用maven開發專案的過程中,經常會遇到jar包重複載入或者jar包衝突的問題的,但是由於有些jar是由於maven的依賴載入自動載入進來的, 而不是開發者自己配置的,特別是當專案中pom中配置的jar包依賴本身很多時,開發者靠自己的經驗,有時很難找出是哪

eclipse利用maven工具解決jar衝突問題

專案中出現的問題如下: Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.apache.log4j.Log4jLoggerFactory 原因 :  maven自動載

maven專案解決jar衝突的四種方式

依賴一個jar包往往會下載相互關聯的jar包這就是依賴傳遞 依賴傳遞經常出現ja包衝突,解決方案:直接排除指定的jar包 1、排除原則 <exclusions> <exc

maven 檢查jar依賴衝突和版本衝突 以及解決

問題描述:          專案中用到dubbo實現分散式遠端呼叫服務,整合dubbo的時候,遇到一個Spring的錯誤,NoSuchMethodError的問題。由於匯入了不同版本的jar包造成的。

Mavenjar衝突解決

用了Maven之後,不得不說它是一個很好的用於專案構建,管理,jar包管理的工具,但是使用過程中,相信各位也遇到過jar衝突這種煩人的問題,特別是大專案,依賴的jar包比較多,很容易造成jar包衝突,jar包衝突的一個很大的原因即產類包之間的間接依賴引起的。每個顯式宣告的類包

maven依賴jar包時版本衝突解決

共有四種解決方式: 1、第一宣告優先原則: 在pom.xml配置檔案中,如果有兩個名稱相同版本不同的依賴宣告,那麼先寫的會生效。 所以,先宣告自己要用的版本的jar包即可。 2、路徑近者

Mavenjar衝突解決方式

現象 建立一個maven工程,引入spring-context包。 <dependency> <groupId>org.springframework</groupId> <artifactId>s