Maven继承

冷暖自知 提交于 2020-02-27 06:51:45

Maven继承的特性则能够帮助抽取各模块之前相同依赖和插件配置,在简化POM的同时还能存在各个模块配置的一致性。对于规范项目开发,避免可能存在的版本不一致的问题,有良好的预防作用。

1、使用场景

多个子项目都需要某些依赖, 就可以把子项目共同的依赖抽取到父项目中, 子项目通过继承得到这些依赖, 这样也更好的来管理(比如升级, 删除等)

2、实例

  1. 父项目的打包方式修改为 pom
<groupId>com.ictpaas</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

2)父项目使用 dependencyManagement 标签来管理, 表示子项目默认不继承, 可以配置继承, optional 表示子 pom 无论如何都不能继承

<dependencyManagement>
    <dependencies>
        <!-- 子 pom 可以继承 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <!-- 子 pom 不可以继承 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <optional>true</optional>
        </dependency>
    </dependencies>
</dependencyManagement>
  1. 子项目配置父项目
<parent>
        <!-- 父项目坐标 -->
        <artifactId>parent</artifactId>
        <groupId>com.ictpaas</groupId>
        <version>1.0-SNAPSHOT</version>
        <!-- 父项目 pom 文件路径-->
        <relativePath>../parent/pom.xml</relativePath>
    </parent>
  1. 子项目依赖配置
<dependencies>
        <!-- 不需要版本, 会从父项目继承, 如果指定版本就是代表不是来自父 pom 而是子 pom 自己的. 父项目的 log4j 是不能继承的 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
    </dependencies>
  1. 子项目不仅仅继承依赖, url, name, modeVersion等也能继承, 换句话说子 pom 文件内容很少, 看起来很简洁。

3、dependency和dependencyManagement

下面通过两个场景来理解父pom中使用dependency和dependencyManagement的区别:
1)场景一
现在有这样一个场景,有两个web项目A、B,一个java项目C,它们都需要用到同一个jar包:common.jar。如果分别在三个项目的pom文件中定义各自对common.jar的依赖,那么当common.jar的版本发生变化时,三个项目的pom文件都要改,项目越多要改的地方就越多,很麻烦。这时候就需要用到parent标签, 我们创建一个parent项目,打包类型为pom,parent项目中不存放任何代码,只是管理多个项目之间公共的依赖。在parent项目的pom文件中定义对common.jar的依赖,ABC三个子项目中只需要定义,parent标签中写上parent项目的pom坐标就可以引用到common.jar了。
2)场景二
有一个springmvc.jar,只有AB两个web项目需要,C项目是java项目不需要,那么又要怎么去依赖。如果AB中分别定义对springmvc.jar的依赖,当springmvc.jar版本变化时修改起来又会很麻烦。解决办法是在parent项目的pom文件中使用将springmvc.jar管理起来,如果有哪个子项目要用,那么子项目在自己的pom文件中使用

<dependency>
    <groupId></groupId>
    <artifactId></artifactId>
</dependency>

标签中写上springmvc.jar的坐标,不需要写版本号,可以依赖到这个jar包了。这样springmvc.jar的版本发生变化时只需要修改parent中的版本就可以了。

4、pluginManagement

类似的Maven也提供了pluginManagement元素来帮助管理插件。在该元素中配置的依赖不会造成实际的插件调用行为,当POM中配置了真正的plugin元素,并且其groupId和artifactId与pluginManagement中配置的插件匹配时,pluginManagement的配置才会影响实际的插件行为。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!