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>
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值