• Maven学习(四)-- 生命周期和插件


    标签(空格分隔): 学习笔记


    Maven生命周期是抽象的,不做任何实际的工作,在Maven的设计中,实际的任务都交由插件来完成。
    每个构件步骤都可以绑定一个或者多个插件行为,而且Maven为大多数构建步骤编写并绑定了默认插件。

    三套生命周期

    Maven拥有三套相互独立的生命周期,分别为clean(清理项目),default(构建项目),site(建立项目站点).

    每个生命周期包含一些阶段(stage),用户和Maven最直接的交互放肆就是调用这些生命周期阶段。

    clean生命周期

    • pre-clean: 执行一些清理前需要完成的工作;
    • clean: 清理上一次构件生成的文件;
    • post-clean: 执行一些清理后需要完成的工作。

    default生命周期

    default生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分。

    • process-sources: 处理项目主资源文件。是对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。
    • compile: 编译项目的主码源。编译src/main/java目录下的Java文件至项目输出的主classpath目录中。
    • install: 将包安装到Maven本地仓库,供本地其他Maven项目使用;
    • deploy: 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。

    site生命周期

    Maven能基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。

    • pre-site: 执行一些在生成项目站点之前需要完成的工作;
    • site: 生成项目站点文档;
    • post-site: 执行一些在生成项目站点之后需要完成的工作;
    • site-deploy: 将生成的项目站点发布到服务器上。

    命令行与生命周期

    各个生命周期是相互独立的,而一个生命周期的阶段是有前后依赖关系的。

    • $mvn clean: 该命令调用clean生命周期的clean阶段。实际执行的阶段为clean生命周期的pre-clean和clean阶段;
    • $mvn test: 该命令调用default生命周期的test阶段。实际执行的阶段为default生命周期的validate、initialize等,直到test的所有阶段;
    • $mvn clean install: 该命令调用clean生命周期的clean阶段和default生命周期的install阶段。
    • $mvn clean deploy site-deploy: 该命令调用clean生命周期的clean阶段、default生命周期的deploy阶段,以及site生命周期的site-deploy阶段。

    插件目标

    例如,一个插件maven-dependency-plugin有十多个目标,每个目标对应了一个功能,上述提到的几个功能分别对应的插件目标为:dependency;analyze, dependency-tree, dependency-list。冒号前面是插件前缀,冒号后面是该插件的目标。
    (总之,插件目标是指插件对应的多个功能的实现)。

    插件绑定

    Maven的生命周期与插件相互绑定,用以完成实际的构建任务。

    插件解析机制

    为了方便操作,Maven不需要用户提供完整的插件坐标信息就可以解析得到正确的插件。例如:执行mvn help:system这样一条命令,它到底执行了什么插件?该插件的groupId, artifactId, version分别是什么?下面详细介绍Maven的运行机制。

    插件仓库

    依赖构件一样,插件构件同样基于坐标存储在仓库中。在需要的时候,Maven先在本地仓库中寻找插件,如果不存在,则从远程仓库查找。找到插件后,在下载到本地仓库使用。

    但是Maven会区别对待依赖的远程仓库和插件的远程仓库,插件的远程仓库配置如下:

    <pluginRepositories>
        <pluginRepository>
            <id>central</id>
            <name>Maven Plugin Repository</name>
            <url>http://repo1.maven.org/maven2</url>
            <layout>default</layout>
            <snapshots>
                <enable>false</enable>
            </snapshots>
            <releases>
                <updatePolicy>never</updatePolicy>
            </releases>
        </pluginRepository>
    </pluginRepositories>
    

    插件默认的groupId

    在POM配置插件的时候,如果该插件是Maven的官方插件(即groupId为org.apacha.maven.plugins),就可以省略groupId的配置:

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-complier-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    解析插件版本

    为了简化插件的配置和使用,在用户没有提供插件版本的情况下,Maven会自动解析插件版本。方式与依赖插件解析一致。
    但是依赖Maven解析插件版本是不推荐的做法,会存在潜在的不确定性。

    解析插件前缀

    插件前缀与groupId:artifactId是一一对应的,这种匹配关系存储在仓库元数据中。
    与依赖插件groupId/artifactId/maven-metadata.xml不同,这里的仓库元数据为groupId/maven-metadata.xml。插件的默认位置为:http://repo1.maven.org/maven2/org/apache/maven/pluginshttp://repository.codehaus.org/org/codehaus/mojo/,Maven在解析插件仓库元数据的时候会默认使用这两个groupId。
    也可以通过配置settings.xml让Maven检查其他groupId上的插件仓库元数据:

    <settings>
        <pluginGroups>
            <pluginGroup>com.your.plugins</pluginGroup>
        </pluginGroups>
    </settings>
    
  • 相关阅读:
    hbase2.x错误记录之 disable表卡住
    hbase2.x 错误记录之 procedure is still running
    yarn timelineserver v2 配置
    Linux 系统出现大量的CLOSE_WAIT
    hbase 2.x 异常记录之 hbase shell不能分配内存
    spark 访问 hive,不能获取到数据信息
    hive 由于distcp导致执行sql慢
    Hbase 安装部署
    MooseFS安装部署
    hbase2.x 单节点启动,master挂掉
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/5987571.html
Copyright © 2020-2023  润新知