问题描述:
项目中用到dubbo实现分布式远程调用服务,整合dubbo的时候,遇到一个Spring的错误,NoSuchMethodError的问题。由于导入了不同版本的jar包造成的。就是说,当我发布了一版2.0jar的时候里面有个我新写的方法 adduser,但是1.0里面没有,pom没有及时更新jar,这样就会有NoSuchMethodError。我们怎么知道是否是jar包冲突的问题呢,可以使用maven命令来查看。
问题解决:
mvn dependency:tree
可以看到dubbo包依赖了哪些包,里面引用了Spring的包,我们项目用的是ssm框架,所以会引用spring4.2.4的包,这样spring版本就出现了冲突。
去除默认引入的spring即可。
<!-- dubbo相关 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,上面tree命令只能检查jar依赖的冲突,不能看到所有的类的依赖关系,还有下面这个命令 enforcer:enforce 是用来检查重复类的。
mvn -U clean package -Dmaven.test.skip=true enforcer:enforce -DcheckDeployRelease_skip=true -Denforcer.skip=false
总结:
maven不仅是构建工具,它还是依赖管理工具和项目管理工具,提供了中央仓库,能够帮我们自动下载构件。有很多命令需要我们去学习。在实践中多多总结经验。