热门标签 | 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

推荐阅读
  • 手把手教你构建简易JSON解析器
    本文将带你深入了解JSON解析器的构建过程,通过实践掌握JSON解析的基本原理。适合所有对数据解析感兴趣的开发者。 ... [详细]
  • 设计模式笔记12:迭代器模式(Iterator Pattern) ... [详细]
  • 本文介绍如何使用 Google 开发的 libphonenumber 库在 Java 应用中实现电话号码的有效性验证。该库不仅支持多种国际电话号码的格式化与解析,还提供了一系列强大的验证工具。 ... [详细]
  • 本文详细记录了在Ubuntu 9.10操作系统上从零开始搭建LAMP(Linux, Apache, MySQL, PHP)环境的过程,包括遇到的问题及解决方案。旨在为初次尝试搭建LAMP环境的开发者提供参考。 ... [详细]
  • 本文详细介绍了 Android 开发中显式 Intent 和隐式 Intent 的区别及应用场景,包括如何通过显式 Intent 在同一应用内切换 Activity,以及如何利用隐式 Intent 实现跨应用的功能调用。 ... [详细]
  • 在上一章【第三十九章:基于SpringBoot&Quartz完成定时任务分布式单节点持久化】中我们已经完成了任务的持久化,当我们创建一个任务时任务会被quartz定时任务框架自动持 ... [详细]
  • 本文档整理了公司内部常用的网站链接和重要资源路径,包括部门周报、内控报销系统、邮件服务等,同时提供了相关数据库的登录信息。 ... [详细]
  • 本文探讨了如何在Django中创建一个能够根据需求选择不同模板的包含标签。通过自定义逻辑,开发者可以在多个模板选项中灵活切换,以适应不同的显示需求。 ... [详细]
  • 本文介绍了NHibernate中通过定义接口和实现类来管理会话工厂的方法,包括接口的优势、模型文件夹的结构以及具体的代码示例。 ... [详细]
  • 本文通过一个具体的用户管理项目,详细介绍如何使用Spring MVC框架进行开发。从用户实体类的设计到控制器的实现,再到视图层的展示,全面解析Spring MVC的核心功能与实现细节。 ... [详细]
  • 右下角动态通知实现
    本文介绍如何在网页中实现右下角滑动通知的功能,包括前后台代码示例及具体实现步骤。 ... [详细]
  • 本文详细介绍如何在Android模拟器上安装TaintDroid的过程,包括解决源代码链接失效及服务器文件变动等问题,旨在帮助后续用户避免不必要的麻烦。 ... [详细]
  • Spring Boot中的API可视化工具介绍
    本文将介绍如何使用Spring Boot集成Swagger来创建和展示API文档。通过访问http://localhost:8080/swagger-ui.html,用户可以直接查看到应用的API文档界面,这一功能极大地简化了API文档的编写和维护。 ... [详细]
  • 本文探讨了在Android应用程序开发过程中动态管理Fragment的方法,包括动态添加和切换Fragment,以及如何实现平滑的过渡动画。文章通过一个具体的案例——订单管理系统,详细介绍了实现步骤和技术细节。 ... [详细]
  • 本文探讨了缓存系统中的两个关键问题——缓存穿透与缓存失效时的雪崩效应,以及这些问题的解决方案。此外,文章还介绍了数据处理、数据库拆分策略、缓存优化、拆分策略、应用架构演进及通信协议的选择等内容。 ... [详细]
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社区 版权所有