随笔记录之---maven版本管理(dependencyManagement,import)

dependencyManagment

介绍前先说,没有这个东西的时候产生发问题 ,大家都知道maven 的父子工程目的是为了,像代码一样抽出公共部分的内容,放到父类里,减少重复的代码,在不同的模块下,确有多个相同的依赖依赖 。

例如 spring容器的依赖,写java的似乎没有人不用spring的那几个依赖包,或者在企业项目里抽象出的一些工具类,大家都要用的, 那么通常的做法,是公司的架构中,每个模块都继承一个统一的父pom, 这个父pom,定义了一些常用的 depency, 这样就省去每个负责模块的开发人员在单独引入,这样做的好处,可以用一个父pom 集中管理,因为我们日常开发中很可能遇到,不同版本的jar,带来的不必要的麻烦,管理起来每个人引用的依赖版本是个好的方法。

好的这样又引入了一个新的问题,对于继承了父pom的模块,它可能仅仅需要,父pom 中的部分 depency,其他的不需要怎么办?

解决办法: 其实就是每个模块根据自己需要来引入,想要用的模块啦,但是这不是又回到了刚刚的问题么? 那我还继承父pom 干嘛?对于这种情况,maven 是通过 dependcyManagment 标签来解决的,此标签只能解决,规定每个模块所引用的依赖版本。

看一个例子吧:
父pom

 <dependencyManagement>
        <dependencies>
       <!--一个好用的工具类-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.0.12</version>
         </dependency>
        </dependencies>
    </dependencyManagement>
    ```
    子pom
 ```xml
 <dependencies>
         <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
         </dependency>
      
        </dependencies>

假如父pom中的 hutool-all 依赖并不是每个子模块都想引入的,但是父pom 又想管理此dependency 的版本,那么父pom ,可以使用dependencyManagement 标签管理此 hutool-all 的版本,而且可以满足,继承父pom的每个子模块本身是没有引入 hutool-all ,只有显示的在自己的pom 中 用 dependency 声明就行,但是版本号会默认使用父pom 中dependencyManagement 标签所管理的。

通常在企业里类似这样的操作:

父pom

 
 <dependencyManagement>
        <dependencies>
       <!--一个好用的工具类-->
          <!--springcloud 组件-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>2.1.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
 

spring-cloud-dependencies 本身就是一个父pom它,管理着很多 org.springframework.cloud 的版本, 这看起来就像在一个java 类中又import 另一个包,所以一个pom 可以通过继承一个父pom, 同时又可以让父pom 通过 dependencyManagement 标签来 用 import 引入另一个父pom管理的版本,这解决了一个pom 只能单一继承一个父,可以通过import 的方法引入其他父pom。

注意: pom 一般父工程,或者聚合工程的pom 打包类型都是pom ,表示此项目仅仅是做版本管理,一般没有 src/main/java之类的文件夹,不需要打包。

所以在企业里,大型的微服务下,会有这么几类负责管理版本依赖的pom,

1 父pom,管理这通用的依赖,管理常用框架的版本。
2 私有依赖pom,这个相等与引入的另一个父pom,不同的是,此pom 一般用来专门存放每个微服务自己的客户端,供给其他业务组使用。每个微服务到公共的pom 下更新自己的依赖,就省去了 其他微服务要手动改版本这件事情。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值