栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Maven父子项目工程依赖原则及问题解决

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Maven父子项目工程依赖原则及问题解决

Maven父子项目工程依赖原则及问题解决

文章目录
  • Maven父子项目工程依赖原则及问题解决
    • 插件
    • 父子工程继承原则
    • Springboot公共模块处理方案
        • 方案一(推荐):common只放自定义包,father模块放公共,son继承father后,再通过引入common。
        • 方案二:common中既放自定义包,又放公共,son依然继承father(并没有意义),再在son中通过引入common。
        • 方案对比
    • SpringBoot父依赖冲突问题(针对方案二)


插件

依赖:运行时开发时都需要用到的jar包,在项目打包时需要把这些依赖也打包进项目里,是项目必须的一部分。

插件:在项目开的发时需要,但是在项目运行时不需要。主要用于减少开发工作量,非项目必须。例如compile插件是用来编译代码的工具,mybatis插件是用来自动生成数据库dao和mapper的工具,没有这些工具自己也可以手敲。

父子工程继承原则
  1. parent的pom.xml设置
    • 父工程需要打包为pom
    • 通过module引入子模块

    
    
        com.liu.grandpa
        grandpa
        0.0.1-SNAPSHOT
	
    
    
	com.liu.father
	father
	0.0.1-SNAPSHOT
    
    
	pom

    
	
		sonA
		sonB
    
    
    
    
        1.8
    
    
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
    
    
    
    
        
            
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.2.7.RELEASE
                pom
                import
            
        
    
    
    
    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

  1. son的pom.xml设置
    • 引入parent依赖

	com.liu.father
	father
	0.0.1-SNAPSHOT

sonA
0.0.1-SNAPSHOT
  1. 产生的效果
    • 属性问题:parent模块中属性、属性都可以直接在son中直接使用
    • 导包问题:中的属性son中不能直接使用,需要再通过引入具体包,但是中的版本控制会被沿用
    • 插件问题:不能被继承
    • 祖辈依赖问题:由于son继承father,father继承grandpa,所以son对于grandpa的依赖=son对father的依赖+father对grandpa的依赖
    • 注意:
      • 属性为compile、provided、test均可被继承
      • 如果只是想声明父子关系不想让son引入father依赖,可以只配置father的,不用在子项目中配置
Springboot公共模块处理方案

父工程father,子模块son,公共模块common(各种手写的自定义包)

方案一(推荐):common只放自定义包,father模块放公共,son继承father后,再通过引入common。 方案二:common中既放自定义包,又放公共,son依然继承father(并没有意义),再在son中通过引入common。 方案对比

​ 方案一通过传递依赖,可以将ommon工程中的自定义包和common工程pom文件中属性为compile、provided、test的包全都传递给son

​ 方案二通过实现传递,但依赖的包均为编译好的包,只能使用common工程中的自定义包和common工程pom文件中属性为compile的包(provided和test都不可用)。

SpringBoot父依赖冲突问题(针对方案二)

问题描述:如果common工程作为公共模块整合springboot,需要继承springboot的parent依赖(继承版本号),同时common要做为father模块的一个子模块,这时common就会出现两个parent。

现象出现:son需要通过的方式导入common,但是,但common工程不能出现两个父模块,报红

解决方案:springboot有两种引入版本的方式,可采用方式二通过引入版本管理

​ 方式一:引入spring-boot-starter-parent实现版本管理


    org.springframework.boot
    spring-boot-starter-parent
    2.6.3
     

​ 方式二:引入版本管理

    
        
            
                org.springframework.boot
                spring-boot-dependencies
                2.6.3
                pom
                import
            
        
    
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/865713.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号