maven终极解惑

经常用maven,你觉得对maven够熟悉吗?作为一个java构建和依赖管理工具,相信大家只是用用,很少会系统的找本书学习,我也一样,从来没有系统的学习过maven,这就导致了有些地方,尤其是多模块的项目,不在实际应用中发现和解决问题,总会有一些迷惑点会让你走不少弯路的,本篇是结合我实际趟过的疑惑点的几个关键点总结。

一、 maven的作用总结,只有两点:

1 从源码到构件期:编译源码产生构件(这个过程只是编译本工程的源码,不会涉及到运行时的依赖处理!)

2 项目打包期: 打包成可运行的应用包时,会级联分析pom处理依赖关系(这个过程就是处理依赖,不会涉及到编译!)

形象的比喻maven:一个工程相当于我要制造一部手机,一部分核心设计需要自己来(比如主板设计),剩下的组件由其他公司设计,我们只需要拿过来组装就可以了。最终的成品手机就是我们想要的目标。其中核心设计就是对应上面说的maven的作用1,拿其他构件组装成手机就是上面上说的maven的作用2。

如果你想要所有手机部件都是自己产的? 那也得一个组件一个组件的来,然后组合、这是一个递归的过程,本质上就是重复上面说的工作任务而已!

二、pom的结构

根据上面的maven功能总结,自然可以得出pom的结构可以划分为两块:

1 编译源码到构件相关的配置(生产手机主板说明书):

   主要是编译相关的插件配置,源码包、资源包相关的配置

2 构件依赖声明(组装成品手机说明书):

   主要是运行期的构建依赖 (编译期依赖主要是做编译检查用的,其中基本也都是运行期必须的依赖)

三、多模块项目的继承关系说明

关于maven的多继承,网上众说纷纭,我来总结下:maven不支持多继承,只有单继承!

重点说明:单继承关系只是用在上文说的从源码到构件期的maven功能,对应于pom的编译源码到构件相关的配置,主要有属性配置、资源配置、编译插件依赖声明、编译插件配置等几部分,这些部分是可以按单继承链的方式分布到多个pom中的。

对于 dependencyManagement:socpe:import类型的依赖,只是对应于上文说的构件依赖声明,只是一种导入关系,或者说组合关系:把其他pom中声明的依赖引入到当前模块来,也仅仅限于编译依赖(dependencyManagement部分声明的依赖不会引入插件依赖声明(pluginManagement),也不会引入pom中的"编译源码到构件相关的配置(编译插件配置)"!

所以maven是不支持多继承的,对于需要多继承的情况(已有parent工程还要引入其他工程的parent),除了单继承链的方式,只能按如下步骤操作:

1 把其他工程的parent中的“编译源码到构件(插件、属性、资源包等)“相关的配置、插件依赖相关的配置(socpe:import不能引入插件依赖声明)拷贝到本parent工程中来

2 其他工程的parent中声明的依赖,通过dependencyManagement:socpe:import模式引入进来。

也就是把其他工程的不能通过socpe:import引入进来的非dependencyManagement依赖相关的pom部分手动迁移到本工程中。

(完)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值