Gradle|Maven多模块开发解决循环依赖

Gradle构建链致命漏洞全解析:循环依赖与版本冲突的底层机制与修复方案 本文深入分析了Gradle构建链中的两大致命漏洞:循环依赖检测机制和版本冲突类加载陷阱。通过源码解析,解释了Gradle如何通过DFS算法检测循环依赖,以及Android系统如何采用"短路径优先"策略加载类。文章提供了全面的解决方案,包括依赖排除、版本对齐、依赖分析工具使用等最佳实践,并结合实战案例说明了如何在实际项目中应用这些方法。最后,文章展望了未来发展趋势,提出了企业级依赖管理的最佳实践。 阅读详情

前提纪要

  • 公司目前是gradle多模块开发 没有用到传统互联网公司的分布式 springCloud、dubbo等
  • 差不多是20个jar包 一个底座war 依赖所有jar包
  • 有公共模块framework、core等

问题出现

  • 前面说过是多模块开发 其中有两个模块比较特殊
  • 一个是 定时调度暂且称为T、一个是数据抽取Etl 暂且称为E
  • 目前的业务要求是T需要调用E中的运行方法、E需要获取T中的定时运行状态以及记录
  • 按照分布式的解决方法很简单就利用Rpc相互调用方法就行了 也不存在直接依赖关系
    如图
    请添加图片描述

解决思路

  • 在gradle中 依赖关系是配置在 build.gradle 中的 如果相互依赖 在打包过程中会报错 也就是所谓的循环依赖
  • 查询了很多方案 大部分人的解决方法是将冲突的业务拆出来单独依赖 但是并不能解决复杂的问题
  • 所以我们取巧一下
首先解决编译问题

对于Java以及Spring而言 编译只要有类型即可 不需要有具体对象 也就是多态中常说的编译看左边 运行看右边
所以 我们新起一个公共模块common 里面定义类型 (Interface) 这时候就解决了编译的问题 所有需要调用其他模块的
方法都写在这里 这样就不会有循环依赖

下面解决运行问题

光有类型是不够的 还需要有具体业务逻辑 以及运行的方法体 所以我们在各自模块 创建实现类impl 这样打包之后
所有的 class 都在底座war中 Spring可以为我们找到 并没有依赖关系的实现类并自动注入

如图

请添加图片描述

这样即使以后再出现依赖冲突 也不用再次拆包 只需要写在common中就可以啦

Gradle快速上手——从Maven到Gradle 【本文写作于2018年7月5日】本文适合于有一定Maven应用基础,想快速上手Gradle的读者。背景Maven、Gradle都是著名的依赖管理及自动构建工具。提到依赖管理与自动构建,其重要性在当今软件环境下不言而喻,Maven也是红极一时。Maven采用约定大于配置的思想,约定了工程结构,生命周期,采用严谨的XML格式进行构建脚本编写,显著地提升了软件构建的效率。但当软件越来越复杂后,大家突然发... 阅读详情

相关推荐

GradleAndMaven:通过Gradle和Maven构建的多模块项目

GradleAndMaven:通过Gradle和Maven构建的多模块项目

Gradle依赖(循环依赖 / 排除依赖)

Gradle 排除排除本地项目 部分依赖 Gradle依赖排除 使用Gradle打包war文件

打不死的小强lee的博客 8552

SAP WMS开发实战:用BAPI_L_TO_CREATE_MULTIPLE搞定LT01转储单(附完整代码)

本文详细解析了SAP WMS开发中如何利用BAPI_L_TO_CREATE_MULTIPLE函数模块批量创建LT01转储单。文章深入剖析了核心参数、常见错误及实战代码框架,重点强调了源/目标存储类型等关键字段的获取方法,为系统集成与自动化流程开发提供了可靠的解决方案。

view3的博客 561

Android项目依赖乱象之Gradle循环依赖

这个问题在使用eclipse进行开发时就存在,只不过当时大部分引入的是jar包,直接检查即可排除包重复的问题; 后来使用Android Studio进行开发,用上了gradle来管理项目的依赖,很方便,极大减少工作量,一句话即可引入; 然而,最近在查看一个运行的项目时,无意间瞥见了这个: 完全懵圈了啊,为什么呢 明明项目里都统一指定了support库的版本号为25.0.

Beluga_白鲸 6937

AI 辅助代码审查:开启代码质量管控的智能时代

AI辅助代码审查正在改变传统的代码质量管控方式。通过自动化分析、智能反馈和上下文感知,AI不仅提高了代码审查的效率,还提升了代码质量的一致性和可维护性。随着机器学习和深度学习技术的不断发展,未来AI将成为开发者日常工作中强大的助手,进一步推动软件开发向智能化、自动化方向发展。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3225

Vue3 视频播放器完整指南 – @videojs-player/vue 从入门到精通

全面解析 Vue3 生态中最强大的视频播放解决方案 @videojs-player/vue。从基础安装到高级功能,涵盖自动播放、直播流、字幕支持等核心特性。提供完整的代码示例和最佳实践,助你快速构建专业的视频播放应用。

前端开发-前端技术分享 1422

Circular dependency between the following tasks(gradle循环依赖的问题)

目前公司项目主要使用gradle而不是maven,所以对gradle的使用不是很清楚,遇到这个问题的时候一直在晚上查资料,但是解决方案基本都是安卓的,后续先前辈请教了一下,才找到解决方案。

Ostkakah的博客 1231

基于立创开源ESP32步进电机驱动板硬件设计与优化实践

本文详细介绍了基于立创开源平台的ESP32步进电机驱动板硬件设计与优化实践。重点解析了ESP32-PICO-D4与A4950驱动芯片的选型搭配、电源电路噪声隔离、PCB布局布线技巧以及保护电路设计,为开发者提供了从原理图到PCB的完整优化方案,有效提升驱动板的性能与稳定性。

7z8x2c4v6b9的博客 645

依赖冲突和循环依赖

Maven:执行 mvn dependency:tree 查看所有依赖及其版本,定位冲突点。Gradle:执行 ./gradlew dependencies(或 gradle dependencies)查看依赖树。目标:找到哪些依赖引入了不同版本的同一库(例如 com.example:lib:1.0 和 com.example:lib:2.0)。

weixin_47344725的博客 2074

SQLite → PostgreSQL 迁移脚本与踩坑清单

本文提供了SQLite迁移到PostgreSQL的两种可靠路径:首选使用pgloader工具自动转换schema和数据,支持类型映射和并行复制;备选方案通过sqlite3导出CSV再用PostgreSQL的COPY命令导入,适合需要自定义清洗的场景。重点介绍了数据类型映射规则、迁移步骤、校验方法和常见问题,包括自增主键、布尔值、时间类型等关键差异处理。迁移后需进行行数核对、哈希抽样等校验,并给出了性能优化建议。最后强调迁移不仅是数据转移,更需要同步升级数据模型和索引策略,根据业务场景选择合适的数据库方案。

aifs2025的博客 1884

Python爬虫实战:利用Selenium与反反爬技术高效爬取企查查工商信息

本文将详细介绍如何使用Python最新爬虫技术(包括Selenium、Playwright、智能代理池等)爬取企查查工商信息数据。文章包含完整的代码实现、反反爬策略、数据解析与存储方案,以及法律合规性讨论,共计约8000字。企查查作为国内领先的企业信息查询平台,收录了超过2亿家企业的工商信息、司法信息、知识产权等数据。这些数据对于市场分析、商业决策等具有重要价值。法律边界提示禁止大规模爬取导致服务器过载不得绕过付费接口获取数据数据使用需遵守《个人信息保护法》商业用途需获得授权。

2201_76125261的博客 2236

Maven和Gradle区别

分享知识 传递快乐 Java中主要有三大构建工具:Ant、Maven和Gradle。Ant用的比较少、Maven用的相对普遍,而Gradle的发展则将是未来的一种趋势。使用Maven需要有pom.xml文件,使用Gradle需要有一个对应的build.gradle文件。 依赖管理系统 Maven中用groupId、artifactId、version组成的Coordination(坐标)...

旷野历程 1万+

Codex 实战 Skills:编写 Skill 自动为 ESP32 芯片生成 MQTT 订阅与发布的基础代码

为了更清晰地展示 Skill 的工作原理和两种语言的差异,以下提供原理图和比对表格。本文深入探讨了如何利用 Codex 的 Agent 智能体技能(Skills)自动化 ESP32 与 MQTT 通信的代码生成过程。我们首先分析了 IoT 开发的痛点,然后详细设计了 Skill 的输入配置,并分别提供了 MicroPython 和 C++ 两种语言的完整代码实现。通过对比两种语言的优缺点,帮助开发者根据项目需求选择合适的语言。最后,我们提供了详细的运行指南,确保开发者能够快速上手。Skill 设计哲学。

yueyeguzhuo的专栏 81

Gradle与Maven的区别

Java生态体系中有三大构建工具:Ant、Maven和Gradle。其中,Ant是由Apache软件基金会维护;Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程;Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。 经过几年的发展,Ant几乎销声匿迹,而Maven由于较为不灵活的配置也渐渐被遗忘,而

u013131716的博客 6540

国科大人工智能原理与算法-2024-第一次作业-雷震老师

1. 反射行动(比如从热炉子上缩回你的手)是理性的吗?它们是智能的吗? 2. 以下的计算机系统在何种程度上是人工智能的实例: - 超市条码扫描器 - 网络搜索引擎 - 语音激活的电话菜单 - 对网络状态动态响应的网络路由算法 3. 为什么进化会倾向于导致行为合理的系统?设计这样的系统想达到的目标是什么?

MatsumotoChrikk 2926

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

干货|SpringBoot-Maven与Gradle多模块搭建

比较熟悉的模式是Springboot+Maven多模块的组织方式,由于近期Gradle势力很猛,据Gradle官网给出的5种压测场景的数据来看,Gradle的处理性能确实比Maven快,所以就来体验一下Gradle怎么做多模块搭建和各种依赖的引入和查看。对Gradle官网提供的Maven与Gradle的对比感兴趣的

c_zyer的博客 3274

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

gradle搭建springBoot多模块项目

Gradle是源于Apache Ant和Apache Maven概念的项目自动化构建开源工具,它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置面向Java应用为主。当前其支持的语言暂时有Java、Groovy、Kotlin和Scala。Gradle是一个基于JVM的构建工具,是一款通用灵活的构建工具,支持maven, Ivy仓库,支持传递性依赖管理,而不需要远程仓库或者是pom.xml和ivy.xml配置文件,基于Groovy,build脚本使用Gro

qq_34905631的博客 4061

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Gradle 多模块项目结构介绍

Gradle 的多模块项目(Multi-Module Project)是一种将复杂项目拆分为多个模块,以提高可维护性和复用性的开发方式。

常备不懈 1449

Maven和Gradle对比

作者:微笑点燃希望 链接:http://t.cn/E9lSF4j 推荐阅读 1.SpringBoot 整合篇 2.手写一套迷你版HTTP服务器 3.记住:永远不要在MySQL中使用UTF-8 4.Springboot启动原理解析 Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发...

Java笔记虾 9807

经验笔记:Maven 与 Gradle —— Java 构建工具对比

Maven 和 Gradle 在核心功能上有很多相似之处,但在配置方式、构建方式、依赖管理和扩展性等方面存在显著差异。选择哪个工具应考虑项目的具体需求、团队的技术栈以及个人偏好。在 Java 开发过程中,选择合适的构建工具对于提升开发效率、保证构建一致性以及简化项目管理至关重要。Maven 和 Gradle 是目前最常用的 Java 构建工具,它们不仅能够自动化构建过程,还能有效管理项目依赖。本文将详细介绍这两种工具的基础知识,并对比它们的异同,帮助开发者更好地理解并选择合适的构建工具。

qq_45831414的博客 1914

springboot+kotlin/java + gradle/maven 多模块项目搭建

文章目录1 使用gradle + kotlin 版1.1 创建新项目1.2 修改build.gradle.kts1.3 创建模块1.4 编写模块。1.5 运行测试2 使用gradle + java 版2.1 创建新项目2.2 修改build.gradle2.3 创建模块2.4 编写模块。2.5 运行测试3 使用maven+Java版3.1 创建父工程3.2 创建子模块3.3 编辑父工程 pom.xml 文件3.4 编辑子模块 pom.xml 文件3.5 编写代码3.6 启动测试3.7 打包部署4 maven

鸿鹄的博客 3893

Maven VS Gradle

摘要: Maven与Gradle是Java主流构建工具,Maven以XML配置和标准化著称,适合中小型项目;Gradle支持Groovy/Kotlin脚本,具备增量构建、缓存优化和灵活依赖管理,更适合大型或多语言项目。核心差异包括:Maven配置静态且全量构建,Gradle可编程且高效;Gradle的implementation依赖控制优于Maven的scope;多模块构建中Gradle自动推导依赖关系。选型建议:简单项目用Maven降低成本,复杂场景用Gradle提升效率,迁移时可逐步过渡。

爱片闲串,爱钓鱼,爱中医,爱分享 1303

01 | 使用Gradle构建多模块项目

从无到有的搭建一套基于 SpringBoot 的开发脚手架,其中包含很多实用的技术和技巧,希望能和大家共同进步。

gotanksgn的博客 4942

Gradle与Maven

Spring boot从根本上讲,是一个库的集合,是一个用来简化新spring应用的初始搭建以及开发过程的全新框架,特定方式(继承starter,约定优先于配置),maven或者gradle项目导入相应的依赖就可使用springboot。 Maven:xml语言,是Java中的新的依赖管理系统,在Java中可用groupld、artifactld、version组成的coordination(坐标)唯一标识出一个依赖。基于maven构建的项目自身必须要定义这三种属性,最后生成的包的格式可用是jar,wa.

qq_43247014的博客 4564

【springboot开发】Gradle VS Maven

AntMavenGradlegradle使用了Groovy作为配置文件,相较于maven的pom文件更加灵活Gradle和Maven都支持并行的项目构建和依赖解析。但是gradle的三个特点让gradle可以跑的比maven快上一点:增量构建构建缓存Gradle守护进程Gradle非常灵活,并且基于脚本。自定义构建将很容易在Gradle上完成。Gradle功能更强大。但是,有时候一个中小型的项目不需要它提供的大多数功能,则Maven可能就是最佳选择。

idiotyi的博客 2212

Maven和Gradle详解

Maven和Gradle对比 java三大构建工具 Java世界中主要有三大构建工具:Ant、Maven和Gradle。经过几年的发展,Ant几乎销声匿迹、Maven也日薄西山,而Gradle的发展则如日中天。 maven特点 Maven的主要功能主要分为5点,分别是依赖管理系统、多模块构建、一致的项目结构、一致的构建模型和插件机制。我们可以从这五个方面来分析一下Gradle比起Maven的先进之...

菜菜鸟的博客 2478
上一篇: Leetcode剑指 Offer 24. 反转链表
下一篇: 记一次 while(true) 产生的CPU爆满
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值