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

推荐阅读
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本文介绍了一段使用jQuery实现的用户注册页面表单验证代码,适用于前端开发人员学习和参考。该示例结合了HTML、CSS和JavaScript,确保用户输入的数据格式正确。 ... [详细]
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社区 版权所有