一例需要排除框架中的依赖.

本文介绍了一个在Spring+SpringMVC+Maven+Dubbo的系统中遇到的NoSuchMethodError错误。该错误源于不同版本的jar包冲突,特别是Spring版本不一致所导致的问题,并提供了解决方案。

最近学习Dubbo过程中,出现了一个错误。首先说下系统的结构:spring+SpringMVC+Maven+Dubbo

本来系统可以正常跑起来,但是加上Dubbo的依赖以后,就报错了。

dubbo依赖如下:



添加到pom文件后就发生了这样一个错误,



一般NoSuchMethodError都是由于导入了不同版本的jar包造成的。比如说有个方法是showMoney,这个方法在money-1.1.jar里面是没有的,是后续版本(money-2.1.jar)里面添加进去的。但是最终系统还是调用了1.1版本的showMoney方法,最终导致了noSuchMethodError方法。

(个人是这么理解了,如有错误,还请指正)


这样的话我们来看下引入dubbo后,伴随加入了那些jar进来了,mvn dependency:tree


这里我们可以看到,它默认会把spring的2.5.6版本引入,我系统本来是用的spring的3.1版本,所以最终造成了jar包冲突


解决办法:去除默认引入的spring即可

<think>好的,用户想知道如何在Maven的pom.xml文件中配置API依赖。首先,我需要回顾一下Maven依赖管理的基本知识。根据引用[4],dependencyManagement元素用于集中管理依赖版本,这在多模块项目中特别有用。不过用户这里可能只是要添加一个普通的依赖,不一定涉及多模块。 接下来,用户提到的是API依赖,通常这可能指的是像Java EE API或者某些第三方提供的API库。例如,Servlet API或者Spring框架依赖。需要确认用户具体需要哪个API,但一般来说,步骤是相似的。 首先,找到所需API的groupId、artifactId和version。这些信息通常可以在Maven中央仓库或者对应库的官方文档中找到。例如,Servlet API的依赖信息可能是javax.servlet的groupId和servlet-api的artifactId,版本可能是3.1.0。 然后,在pom.xml的<dependencies>部分中添加<dependency>元素。需要正确填写groupId、artifactId和version。如果项目是继承自父项目,根据引用[2],可能有些版本号已经通过父pom管理,所以可以省略version,但如果没有的话,必须明确指定。 另外,需要注意依赖的范围(scope)。比如,Servlet API在编译时需要,但运行时可能由容器提供,所以通常会使用provided范围。例如: <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency> 同时,引用[3]提到只有打包方式为pom的项目才能管理其他项目,但这里用户只是添加依赖,所以不需要考虑这点。如果是多模块项目,可能需要使用dependencyManagement来统一版本,如引用[4]所述,但普通情况下直接添加依赖即可。 最后,用户可能需要知道如何验证依赖是否正确添加。可以通过执行mvn dependency:tree查看依赖树,或者运行mvn compile来检查是否下载成功。如果有父pom,可能需要检查是否有版本覆盖的情况,如引用[2]提到的继承机制。 总结步骤:找到依赖坐标,添加到dependencies,指定scope(如果需要),验证配置。</think>在Maven的`pom.xml`文件中配置API依赖,需要遵循以下步骤: ### 1. 确定依赖坐标 首先需要获取API依赖的三个关键信息: - **groupId**:组织/项目组标识(如`org.springframework`) - **artifactId**:项目/模块唯一标识(如`spring-core`) - **version**:依赖版本(如`5.3.8`) 可通过[Maven中央仓库](https://mvnrepository.com/)搜索具体API的坐标。 --- ### 2. 添加依赖配置 在`pom.xml`的`<dependencies>`标签内添加如下格式(以Spring Web API为例): ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.8</version> <scope>compile</scope> <!-- 作用域可选 --> </dependency> ``` #### 关键参数说明: - **scope**:依赖作用范围(默认`compile`,常见值包括`test`/`provided`/`runtime`) - **exclusions**:可声明排除传递依赖 - **type**:依赖类型(默认`jar`,如`pom`/`war`需显式声明) --- ### 3. 依赖管理优化(可选) 如果是多模块项目,建议在父POM的`<dependencyManagement>`中统一管理版本[^4],子模块继承时无需重复声明版本: ```xml <!-- 父POM中 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>5.3.8</version> </dependency> </dependencies> </dependencyManagement> <!-- 子模块中 --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <!-- 无需写version --> </dependency> </dependencies> ``` --- ### 4. 验证依赖 执行命令检查依赖树: ```bash mvn dependency:tree ``` 该命令会展示依赖关系层级,帮助发现版本冲突或遗漏[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值