一,生命周期和插件

1.除了坐标、依赖和仓库之外,maven的另外两个核心概念就是声明周期和插件。

生命周期和插件协同工作,密不可分。

清理 初始化 编译 测试 打包 集成测试 验证 部署 站点生成 等

2.三套相互独立生命周期 clean default site

3.各个生命周期详解

clean default

site

4.命令行与生命周期

执行maven任务的主要方式就是调用maven的生命周期阶段,各个生命周期互相独立,而一个生命周期的阶段是有前后依赖的,执行某个生命周期,他之前的都会执行。

5.插件目标plugin goal

maven的核心仅仅定义了抽象的生命周期,具体任务是交由插件完成的,插件以独立构件的形式存在。对于插件本身,为了能够复用代码,它往往可以完成多个任务。

6.插件绑定

maven的生命周期与插件互相绑定,用以完成实际的构建任务。具体而言就是生命周期的阶段和插件的目标相互绑定。

default内置插件绑定关系及其任务

自定义绑定

例如创建项目的源码jar包,

二,聚合和继承

1.一般来说,一个项目的子块都应该使用相同的groupId,如果它们一起开发发布,还应该使用相同的version,此外他们的artifactId还应该使用一致的前缀,以方便同其他项目区分。

2.聚合性:

一次性构件两个或者多个项目,只需执行一次mvn命令,maven的聚合或称为多模块就是为该需求服务的。

groupId,version都一样,artifactId,name独立的,packaging为pom(必须为pom否则无法构建),modules是实现聚合最核心的配置,

module元素值为都是一个当前pom的相对目录,一般来说,为了方便快速定位内容,模块所处的目录名称应该与其artifactId一致,也不是必须的要求,通常将聚合模块放在项目的目录最顶层,

如果使用平行目录结构module的值也要做对应的修改,

<modules>

<module>../accout-email</module>

<module>../account-persist</module>

</modules>

3.继承

父模块代码清单

packaging的值必须为pom

由于父模块是帮助消除配置的重复的,所以不包含pom以外的项目文件,也就不需要src/main/java/之类的文件夹了

正确设置relativePath的值非常重要,如果不正确,maven找不到父pin,构建失败,

更新过的account-email没有groupId和version,隐式继承父pom的。

父模块也要放到聚合模块里,放到最上边。

可被继承的pom元素除了groupId version description还有以下

4.继承的管理,使用dependenceyManagement元素把dependences放入其中管理

父pom

子pom

可省去版本信息,单元测试scope也可省去。虽然这些不能减少太多的pom配置,但是还是强烈推荐,dependencyManagement声明依赖可以统一项目中依赖的版本。如果子类模块不声明依赖的使用,也不会产生任何效果。

5.import的依赖范围

只在dependenceyManagement元素下才有用,想要使用和另外一模块完全一样的dependenceyManagement配置,除了复制配置,继承两种方式外还可以使用import范围依赖将这一配置导入

6.插件的管理 使用pluginManagement元素

代码如下

当子模块需要使用该插件时只需要如下简单配置

<build>

<plugins>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-source-plugin</artifactId>

</plugins>

</build>

如果子模块不使用父模块的插件,尽管将其忽略,如果想使用不同的,也可自行配置覆盖父模块的配置

7.继承和聚合

聚合是为了方便快速构建项目,继承是为了消除重复配置。

聚合模块知道聚合了哪些模块,但是被聚合的模块不知道被谁聚合了。

父模块不知道自己有哪些子模块,子模块必须清楚知道父模块是哪个。

在实际项目中,我们往往会发现一个模块即是父模块,又是聚合模块,主要是为了方便。

当父模块在上一层目录时,maven能默认识别父模块的位置,因此不再需要配置relativePath

8.xml流行的原因是之一就是所有语言都接受它,对于maven,约定优于配置convention over configuration

这是maven最核心的设计理念之一。

任何一个maven pom 还都隐式的继承了超级pom

9.反应堆

在一个多模块的项目中,反应堆reactor是指所有模块组成的一个构建结构,包含了模块之间的继承和依赖关系,从而能够自动计算出合理的模块构建顺序。

实际的构建顺序是这样的,maven按顺序读取pom,如果该模块没有依赖模块就构建该模块,否则就先构建其依赖的模块,如果该依赖模块还依赖其他模块,就先构建其他模块。如果出现a依赖b,b又依赖a,maven就会报错。

10.裁剪反应堆

输入mvn -h可以看到以下支持裁剪反应堆的命令,

mvn clean install -pl account-email,account-persist 指定构建某几个模块

mvn clean install -pl account-email -am 同时构建所列模块的依赖模块

mvn clean install -pl account-parent -amd 同时构建依赖于所列模块的所有模块,

mvn clean install -rf account-email在完整的反应堆构建顺序↑指定从哪个模块开始构建。

mvn clean install -pl account-parent -and -rf account-email 对裁剪过的反应堆再次裁剪。

1-2 maven学习笔记(7-8章)的更多相关文章

  1. Stealth视频教程学习笔记(第二章)

    Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...

  2. Stealth视频教程学习笔记(第一章)

    Stealth视频教程学习笔记(第一章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...

  3. 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试

    20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...

  4. Maven学习笔记-03-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  5. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  6. CSS3秘笈第三版涵盖HTML5学习笔记1~5章

    第一部分----CSS基础知识 第1章,CSS需要的HTML HTML越简单,对搜索引擎越友好 div是块级元素,span是行内元素 <section>标签包含一组相关的内容,就像一本书中 ...

  7. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

  8. Maven学习笔记-04-Eclipse下maven项目在Tomcat7和Jetty6中部署调试

    现在最新的Eclipse Luna Release 已经内置了Maven插件,这让我们的工作简洁了不少,只要把项目直接导入就可以,不用考虑插件什么的问题,但是导入之后的项目既可以部署在Tomcat也可 ...

  9. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  10. The Road to learn React书籍学习笔记(第三章)

    The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...

随机推荐

  1. springmvc报406错误

    springmvc出现406,无非就两种情况,第一,百分之九十是json包没加进来,第二,百分之十,就是@ResponseBody返回的的数据,在请求的URL中不能有  .html的后缀

  2. Python基础学习参考(六):列表和元组

    一.列表 列表是一个容器,里面可以放置一组数据,并且列表中的每个元素都具有位置索引.列表中的每个元素是可以改变的,对列表操作都会影响原来的列表.列表的定义通过"[ ]"来定义,元素 ...

  3. Micropython 如何用Turnipbit做一个自动浇水装置

    最近在研究Turnipbit这块板子,打算是连接一个摄像头模块,正在实验练习中,(祝自己早日弄好)上篇文章我们讲了用Turnipbit连接LCD5110显示英文词句,前几天给家里花浇水的时候发现花招了 ...

  4. RMAN还原时注意set newname时文件名不要有空格

      今天遇到一个非常奇怪的现象,查看ORACLE数据库的一个文件,明明这个文件是存在的,但是使用ls -lrt 查看都显示这个文件不存在.很是纳闷! 后面发现在终端输入文件名后并使用tab键时,发现文 ...

  5. 极限学习机︱R语言快速深度学习进行回归预测

    本文转载于张聪的博客,链接:https://ask.hellobi.com/blog/zason/4543. 深度学习在过去几年,由于卷积神经网络的特征提取能力让这个算法又火了一下,其实在很多年以前早 ...

  6. Error:dojo.data.ItemFileWriteStore:Invalid item argument

    1.错误描述 dijit.form.ComboBox TypeError:_4e is undefined                                            Sea ...

  7. VS2010插件

    Highlight all occurrences of selected words

  8. 当发现你的OpenStack虚拟机网络有问题,不妨先试一下这16个步骤

    1. Security Group全部打开,这是最基本的,但是很多人容易忘记 其实遇到过无数这种场景了,Debug了半天网络问题,各种手段都用上了,最后发现安全组竟然没有打开. 2. 通过界面查看虚拟 ...

  9. lvs-nat 模式-piranha

    系统: redhat 6.5 mini 机器名 ip vip gw lvs01(主lvs) 192.168.10.10(外网) 192.168.20.10(内网) 192.168.10.254 lvs ...

  10. Ubantu16.04进行Android 8.0源码编译

    参考这篇博客 经过测试,8.0源码下载及编译之后,占用100多G的硬盘空间,尽量给ubantu系统多留一些硬盘空间,如果后续需要在编译好的源码上进行开发,需要预留更多的控件,为了防止后续出现文件权限问 ...