导读:使用maven是为了更好的帮项目管理包依赖,maven的核心就是pom.xml。而maven中有许多的标签,下面我们主要讨论parent、dependencies与dependencyManagement标签它们的用处以及区别。

一、Parent标签的应用场景

在实际开发中我们为了更好地进行开发和管理我们常会进行模块化开发。现在有这样一个场景,sac-def项目中有两个模块sac-def-service、sac-def-common,它们都需要引用同一个guava.jar。如果在它们的pom文件中都引入guava.jar依赖,当guava.jar的版本发生变化时,两个模块的pom文件都需要修改,比较麻烦。

解决方案:可以通过来实现。如下图所示,sac-def是父项目,不存放任何代码,其作用是管理多个模块之间公共的依赖。

在sac-def的pom文件中定义对guava.jar的依赖

//sac-def的pom.xmlcom.google.guava guava ${guava.version}

子模块中只需要使用parent标签中写上parent项目的pom坐标就可以引用到guava.jar了。

//子模块pom.xml

二、dependencyManagement标签的应用场景:

当guava.jar只有sac-def-service和sac-def-common这两个子模块需要,sac-def-dul子模块不需要,那该如何依赖?如果直接在sac-def-service和sac-def-common中分别定义对guava.jar的依赖,要维持它们引用guava.jar版本一致也比较麻烦。

解决方式:首先通过在parent项目的pom文件中使用将guava.jar管理起来。

//父模块 pom.xmlcom.google.guava guava ${guava.version}

如果有哪个子模块要用,那么子模块便在其pom文件中使用标签中写上guava.jar的坐标,不需要写版本号就可以依赖到这个jar包了。这样当guava.jar版本需要发生变化时,只要修改parent项目中的版本就可以实现子项目的对于guava.jar引用版本保持一致

//子模块pom.xmlcom.google.guava guava  

三、总结

  • dependencyManagement里只是声明依赖,并不实现引入。子项目需要显示的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的。如果子模块中写了该依赖项,并且没有指定具体版本则会从父项目中继承该项,并且version和scope都读取自父pom。如果子模块需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子模块就会使用子模块声明的版本号,不继承于父项目版本号。
  • dependencies的作用是引入依赖,如果继承了父项目,即使在子模块中不写该依赖项,子模块仍然会全部继承父项目。

感谢您的阅读,如果喜欢本文欢迎关注和转发,本头条号将坚持原创,持续分享IT技术知识。对于文章内容有其他想法或意见建议等,欢迎提出共同讨论共同进步。

cmenu 隐藏子项中的一个子项_区分Maven中dependencyManagement与dependencies的作用相关推荐

  1. 【Java】从键盘中输入一个值,在数组中查找该值的索引并输出

    问题: 从键盘中输入一个值,在数组中查找该值的索引并输出 代码: package learnjava;import java.util.Scanner;public class demo13 {pub ...

  2. cmenu 隐藏子项中的一个子项_QML中的模型-视图-代理

    前言 对于开发用户界面,最重要的一方面是保持数据与可视化的分离.例如,一个电话簿可以使用一个垂直文本链表排列或者使用一个网格联系人图片排列.在这两种情况中,数据都是相同的,但是可视化效果却是不同的.这 ...

  3. .net 怎么在控制器action中返回一个试图_一个view事件分发,面试官6连问直击灵魂,我被虐的体无完肤...

    注:原文来自掘金作者xiangcman 写这篇文章其实是有原因的,说实话这次面试真的很失败,看着身边的人都拿到了高薪的工资,感觉自己还是有些惭愧.也更说明自己在很多方面的知识点还是不够扎实,于是再一次 ...

  4. pcl中ransac提取直线_复杂场景中的一个图像配准思路

    在很多时候,我们可能需要使用到图像的识别与配准工作,来判断某个特征或者是划出某个特定特征的位置.现在的深度学习已经能够比较好地解决这个问题,比如常见的YOLO,可以利用几行设定代码就能够划出所需要识别 ...

  5. react中创建一个组件_如何使用React和MomentJS创建一个Countdown组件

    react中创建一个组件 Recently I had to create a Countdown for one of my other projects, and I thought that i ...

  6. java语言中修饰一个常量_接口中定义一个常量所用的修饰符有: (5.0分)_学小易找答案...

    [判断题]Java中的接口不允许被继承 (5.0分) [单选题]下列程序的输出结果是( ) public class Ex_36{ public static void main(String arg ...

  7. python中point什么意思_在Python中创建一个Point类

    我正在尝试在python中创建一个名为"Point"的类.我试图在坐标平面x和y上创建一个点并跟踪它们.以及找到点之间的距离.我必须使用函数和方法.我已经开始了,这是我的代码.我执 ...

  8. 上面两点下面一个三角形_三角形的中位线说课稿范文

    三角形的中位线说课稿范文 作为一名专为他人授业解惑的人民教师,通常需要准备好一份说课稿,说课稿是进行说课准备的文稿,有着至关重要的作用.我们应该怎么写说课稿呢?下面是小编帮大家整理的三角形的中位线说课 ...

  9. 如何在html中做一个表格模板,【网页中表格教案】教案表格模板

    第三课 在网页中插入表格 一.教材分析 网页制作中用表格来规划整个网页的布局,是我们设计制作网页常用的手法.所以学会在网页中插入表格是网页制作中的一个重要的部分.本课的主要内容包括在网页中插入表格,表 ...

最新文章

  1. paip.odbc DSN的存储与读取
  2. 多激光雷达外参⾃动化标定算法及代码实例
  3. 【codeforces 242E】XOR on Segment
  4. TX Pattern Generator功能块
  5. Servlet-Access denied for user 'root'@'localhost' (using password: YES
  6. 网络文件系统(samba、nfs、iscsi)
  7. SharePoint 开发TimerJob 介绍
  8. android fragment 管理器,Android Fragment 與 Fragment管理器
  9. gz解压命令 linux_Linux日常篇-解压缩命令
  10. 计算机网络之网络层:4、ARP协议
  11. LoadRunner11录制APP脚本(2)
  12. php 跨天 时间差 秒,判断时间是否在预设跨天时段
  13. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_5.RabbitMQ研究-入门程序-生产者...
  14. STM32定时器周期任务函数编写
  15. APS Interview - Principles of Computer Organization
  16. 数仓建模(数据模型)
  17. 基于android 的影院售票
  18. Javascript 设计模式之外观模式【讲师辅导】-曾亮-专题视频课程
  19. CSS的作用与各种样式
  20. vue ref reactive

热门文章

  1. python是用c写的吗-python和c语言的区别是什么
  2. python编程在哪里写-Python自带的IDE在哪里
  3. python与excel表格-Python操作 Excel表格
  4. python语言程序设计嵩天-Python语言程序设计基础(第2版)嵩天课后答案
  5. python怎么导入时间-python 插入日期数据到Oracle
  6. php和python交互-python与php的比较
  7. python语言入门u-Jupyter笔记-Python语法基础(U.1)
  8. python表白程序-python如何写出表白程序
  9. python菜鸟教程m-Python map() 函数
  10. linux设置用户密码、查看linux用户信息、root用户管理普通用户(passwd命令使用)