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 对裁剪过的反应堆再次裁剪。

  • 相关阅读:
    hdu 1028 Ignatius and the Princess III (n的划分)
    CodeForces
    poj 3254 Corn Fields (状压DP入门)
    HYSBZ 1040 骑士 (基环外向树DP)
    PAT 1071 Speech Patterns (25)
    PAT 1077 Kuchiguse (20)
    PAT 1043 Is It a Binary Search Tree (25)
    PAT 1053 Path of Equal Weight (30)
    c++ 常用标准库
    常见数学问题
  • 原文地址:https://www.cnblogs.com/lukelook/p/7977353.html
Copyright © 2011-2022 走看看