zoukankan      html  css  js  c++  java
  • 1-2 maven学习笔记(7-8章)

    一,生命周期和插件

    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.继承的管理,使用dependencyManagement元素把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 对裁剪过的反应堆再次裁剪。

  • 相关阅读:
    谷歌技术"三宝"之BigTable
    谷歌技术"三宝"之谷歌文件系统
    谷歌技术"三宝"之MapReduce
    大话存储
    ASP.NET之旅--深入浅出解读IIS架构
    好网站
    ArcGIS API for Silverlight学习资料积累
    浏览器滚动条快到底部时自动加载数据
    MVC EF中Attach和Entry区别
    微信开发jssdk入门
  • 原文地址:https://www.cnblogs.com/lukelook/p/7977353.html
Copyright © 2011-2022 走看看