热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Maven中高效管理多模块项目中的依赖关系

在Maven中高效管理多模块项目的依赖关系是一项重要的技能。通过合理配置父POM文件,可以统一管理和控制各子模块的依赖版本,避免重复导入和版本冲突。本文将探讨如何利用Maven的最佳实践,确保项目依赖的一致性和可维护性,同时提高开发效率。
Maven 中如何管理多模块项目的依赖关系

平时在查看项目的过程中,发现包的依赖关系及其随便,在各个子模块中都各自引入相应的依赖包,有些时候重复导入了也不会发觉。
在参考alibaba dubbo的源码之后,做出如下总结(别人家的代码 ==!)

groupId:组织标识,一般为:公司网址的反写+项目名
artifactId:项目名称,一般为:项目名-模块名

1.首先建一个空的maven项目,项目只需要一个pom.xml文件

交代一下我的demo

项目(root)的groupIdcom.nezha.learn.demo

项目名称 artifactIddemo

该项目有三个子模块:


demo-redis

demo-parent

demo-juc

2.通过IDEANew > Module来构建多个模块

其中的pom.xml文件如下:



4.0.0
com.nezha.learn.demo
demo
pom
1.1-SNAPSHOT



demo-redis

demo-parent

demo-juc




org.apache.maven.plugins
maven-release-plugin
2.4.1

true





3.创建一个专门管理依赖包的模块

同样,该模块只有一个pom.xml文件




demo
com.nezha.learn.demo
1.1-SNAPSHOT
../pom.xml

4.0.0
pom
demo-parent


2.9.0
1.5.2.RELEASE






redis.clients
jedis
${jedis.version}



org.springframework.boot
spring-boot-dependencies
${spring-boot.version}
pom
import




注意此处的artifactId是项目名称,因为所有子模块的依赖都在项目rootpom.xml中定义的。

4.在子模块中引入demo-paren的依赖




demo-parent
com.nezha.learn.demo
1.1-SNAPSHOT
../demo-parent/pom.xml

4.0.0
demo-juc


org.springframework.boot
spring-boot-starter


${project.groupId}
demo-redis
${project.version}



注意此处的artifactIddemo-parent
此时引入的spring依赖是不需要加上版本号的
然后${project.groupId}${project.version用于指代项目和版本。

如何更新所有子模块的版本号

这个也好解决,Maven有插件鸭!

在父级的pom.xml中加个插件就OK了,plugins > release > update-versions




org.apache.maven.plugins
maven-release-plugin
2.4.1

true




maven的pom文件报错: must be “pom” but is “jar”

parent工程的pom.xml文件的project节点下加入如下节点:

pom

参考文献

  1. @Maven POM 详解:https://www.jianshu.com/p/8417a94c4d94
  2. 使用maven-release-plugin自动化版本发布https://blog.csdn.net/shenchaohao12321/article/details/79302791
  3. spring dubbo的源码:https://github.com/apache/incubator-dubbo-spring-boot-project

推荐阅读
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 图数据库中的知识表示与推理机制
    本文探讨了图数据库及其技术生态系统在知识表示和推理问题上的应用。通过理解图数据结构,尤其是属性图的特性,可以为复杂的数据关系提供高效且优雅的解决方案。我们将详细介绍属性图的基本概念、对象建模、概念建模以及自动推理的过程,并结合实际代码示例进行说明。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 深入理解Redis的数据结构与对象系统
    本文详细探讨了Redis中的数据结构和对象系统的实现,包括字符串、列表、集合、哈希表和有序集合等五种核心对象类型,以及它们所使用的底层数据结构。通过分析源码和相关文献,帮助读者更好地理解Redis的设计原理。 ... [详细]
  • 本文详细介绍了 org.apache.commons.io.IOCase 类中的 checkCompareTo() 方法,通过多个代码示例展示其在不同场景下的使用方法。 ... [详细]
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
author-avatar
一个人灬过世界amp丶_420
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有