maven多模块实现以及循环依赖解决

1.项目拆分为微服务 订单服务被单独拆出 负责订单的下单取消退款等等

订单服务 provider

商品服务 是订单服务的comsumer

 

2.项目是maven多模块形式结构 以订单的provider举例

最外层pom.xml中 配置公共的基础依赖jar包,其他子模块会相应引入相同的jar

order-api为暴露给comsumer调用的接口,service-order为api的实现,provider为main函数的入口,项目的启动类

 

同时需要在最外层的pom.xml中定义子模块的module

 

module的名字跟子模块中的artifactId相同

 

以下为子模块的artifactId的例子

子模块需要声明parent才能继承父pom.xml的依赖 同样需要填写父parent的artifactId

 

模块之间的依赖关系 api模块只依赖最基础的三方模块,不能依赖其所在项目的模块,防止出现循环依赖

service模块需要依赖api模块 以及相应的common模块(基础的常用工具类或者result封装对象可以写在这里)和mapper模块(数据库的操作模块,也可以叫manager模块) 以及pojo模块(最基础的实体模块,其不应该再依赖任何模块),

common模块和mapper模块以及pojo模块, 在comsumer项目中有,通过install命令推到maven的本地仓库中

provider项目可以通过引入maven依赖的形式 去使用这些jar

启动类模块中需要依赖service模块,因为需要在启动的时候加载这些模块

一定要加上包扫描,因为默认的扫描只会扫描该启动类所在的目录以及其子目录,而多模块并不满足这个条件

所以需要特别定义

 

扫描的路径 就是每个子模块下的java目录下的第一个包路径 比如 com.nchu.order

并不需要考虑子模块名称

 

需要注意的点。

第一,循环依赖,这个出现频率最高! 举个例子, 如果common模块依赖了pojo模块,mapper模块依赖common模块,而pojo模块居然去依赖mapper模块,此时就出现了循环依赖,因为此时 common模块里面有pojo模块,mapper模块里里面有commom模块,而pojo里面有mapper模块。 分析如下 commom->pojo->mapper->comom ,死循环

 

循环依赖报错如下

 

解决方式

Analyze->Analyze Module Dependencies.

 

即可看到标红

 

通过这种方式可以知道具体是哪些模块出现了循环依赖,去对应的pom文件中去删掉即可

 

千万注意模块之间的依赖关系。

 

 

还有一种情况,就是循环依赖出现在误操作的时候引入,则可以继续用下面这种方式去解决

选中pojo 然右键

 

最后选择modules 找到要解决冲突的子模块名称 选择dependencies 选择刚刚冲突的mapper 右键remove 即可

 

第二 重复依赖 即对同一个接口 引入多个实现类,常见于日志框架,因为日志slf4j就是一个接口,它的实现有很多,比如logback log4j等

这里报错就是 slf4j有多个实现类 冲突了 。原因是,在maven项目里引入多了多个jar,比如说引入了zookeeper和dubbo, 而dubbo和zookeeper分别对是slf4j采用了不同的实现类,一个使用的是log4j,一个是logback ,这样在spring在注入的时候,就不会不知道该注入哪个bean

解决方法一,直接找到这个jar所在的目录,直接删掉, 这个方法简单粗暴,但是只能用一时,下次编译的时候,又会从maven仓库里引入进来

解决方法二,利用idea提供的maven依赖管理工具去从pom.xml里把冲突的jar移除

 

 

方法二的解决方式 在pom.xml中,右键maven ->show dependencies

 

可以很明显的找到冲突的jar 但有时候也需要根据经验去判断

选中之后 右键 exclude 即可将多余的jar从依赖中排除

  • 10
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
DDMQ 是滴滴出行架构部基于 Apache RocketMQ 构建的消息队列产品。作为分布式消息中间件,DDMQ 为滴滴出行各个业务线提供了低延迟、高并发、高可用、高可靠的消息服务。DDMQ 提供了包括实时消息、延迟消息和事务消息在内的多种消息类型以满足不同的业务需求。 用户通过统一的 Web 控制台和傻瓜式的 SDK 即可轻松接入 DDMQ 生产和消费消息,体验功能丰富、稳定的消息服务。 主要功能特性: 1、消息模型:支持 P2P, Pub/Sub 等消息模型 2、海量消息存储,支持消息回溯:使用 RocketMQ 和 Kafka 作为消息的底层存储引擎。 3、低延迟高吞吐:毫秒级延迟,单机百万条消息吞吐。 4、延迟消息:单条消息设置精确到秒级的延迟时间,支持 Thrift、HTTP 形式的回调接口。提供了丰富的消息类型,包括延迟消息和循环延迟消息。 5、事务消息: 提供类似 X/Open XA 的分布事务功能,通过 DDMQ 事务消息能够达到分布式事务的最终一致。 6、多语言客户端: 提供了主流开发语言的 SDK,包括 PHP, Java, Go, C/C++, Python 等。API 上保持着最易使用的 High Level 形式。 7、支持复杂的消息转换过滤功能:支持使用 Groovy 脚本在服务端进行消息内容的转化和过滤,能做大大地减少客户端和服务器的数据传输,同时减少客户端的处理消息的负载。 8、提供了一个易用性高的 Web 用户控制台,方便用户在控制台上申请 Topic, ConsumerGroup, Subscription 等资源。 提供消费进度的查看和重置功能。 模块介绍: carrera-common 提供其他模块的公共代码,封装了 ZK 操作。 carrera-producer 生产消息代理模块,内置 Thrift Server, 负责将 client 的生产的消息转发给 broker。 carrera-consumer 消费消息代理模块, 内置 Thrift Server, 提供 SDK 拉取和 HTTP 推送等方式将消息发给订阅方。 carrera-chronos 延迟消息模块,使用 RocksDB 作为延迟消息的存储引擎。 carrera-sdk 生产和消费消息的 SDK 代码, 支持 Java/C/C++/Go/PHP/Python 等主流语言。 rocketmq 基于开源 RocketMQ 修改(版本 4.2.0),增加了 broker 主从自动切换等特性。 carrera-console 基于 Spring 开发的用户控制台,管理配置。 carrera-monitor 监控模块,提供消费积压监控和集群健康监控。 carrera-docker 提供单机版的 DDMQ 镜像,方便部署和使用。 外部依赖: 64bit OS, Linux/Unix/Mac 64bit JDK 1.8+ Maven 3.2.x MySQL 5.7.x Tomcat 7/8/9 Zookeeper 3.4.x

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值