【Java基础】Maven继承

2024-05-14 1906阅读

1. 前言

Maven 在设计时,借鉴了 Java 面向对象中的继承思想,提出了 POM 继承思想。

2. Maven继承

当一个项目包含多个模块时,可以在该项目中再创建一个父模块,并在其 POM 中声明依赖,其他模块的 POM 可通过继承父模块的 POM 来获得对相关依赖的声明。对于父模块而言,其目的是为了消除子模块 POM 中的重复配置,其中不包含有任何实际代码,因此父模块 POM 的打包类型(packaging)必须是 pom。

如图 1 所示,一个项目中存在如下多个模块。

【Java基础】Maven继承

如上图所示:

  • App-UI-WAR 依赖于 App-Core-lib 和 App-Data-lib。
  • Root 是 App-Core-lib 和 App-Data-lib 的父模块。
  • Root 在它的依赖部分定义了 junit 4.9、mysql-connector-java 5.1.18 以及 c3p0 0.9.1 作为其依赖。

    App-UI-WAR 的 pom.xml 配置如下。

        4.0.0
        net.wangzhe.www
        App-UI-WAR
        1.0
        
            
            
                net.wangzhe.www
                App-Core-lib
                1.0
            
            
            
                net.wangzhe.www
                App-Data-lib
                1.0
            
        
    
    

    父模块 POM 配置

    父模块 Root 的 pom.xml 配置如下。

        4.0.0
        net.wangzhe.www
        Root
        1.0
        
        pom
       
        
            
                junit
                junit
                4.9
                test
            
            
                mysql
                mysql-connector-java
                5.1.18
                runtime
            
            
                c3p0
                c3p0
                0.9.1
            
        
    
    

    在父模块 Root 的 pom.xml 中,其打包类型(packaging)为 pom,并声明了 3 个依赖:junit 4.9、mysql-connector-java 5.1.18 以及 c3p0 0.9.1 。

    子模块 POM 配置

    App-Core-lib 的 pom.xml 配置如下。

        4.0.0
        net.wangzhe.www
        App-Core-lib
        1.0
        
            net.wangzhe.www
            Root
            1.0
            ../Root
        
        
            
                log4j
                log4j
                1.2.17
            
        
    
    

    App-Data-lib 的 pom.xml 配置如下。

        4.0.0
        net.wangzhe.www
        App-Data-lib
        1.0
        
            net.wangzhe.www
            Root
            1.0
            
        
    
    

    App-Core-lib 有 5 个依赖项,其中 junit 4.9、mysql-connector-java 5.1.18 以及 c3p0 0.9.1 是从父模块 Root 中继承的;log4j 1.2.17 是该模块本身的 POM 中声明的;hamcrest 1.1 是 junit 4.9 传递下来的依赖项。

    App-Data-lib 有 4 个依赖项,其中 junit 4.9、mysql-connector-java 5.1.18 以及 c3p0 0.9.1 是从父模块 Root 中继承的;hamcrest 1.1 是 junit 4.9 传递下来的依赖项。

    子模块的 POM 中,当前模块的 groupId 和 version 元素可以省略,但这并不意味着当前模块没有 groupId 和 version,子模块会隐式的从父模块中继承这两个元素,即由父模块控制子模块的公司组织 id 以及版本,这样可以简化 POM 的配置。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]