3-Maven的生命周期和插件配置

【Maven生命周期】

Maven拥有三套相互独立的生命周期,它们分别为clean、default、site。clean生命周期的目的是清理项目,default生命周期的目的是构建项目,而side生命周期的目的是建立项目站点。
每个生命周期包含一些阶段(phase),这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和 Maven 最直接的交互方式就是调用这些生命周期阶段。以 clean 生命周期为例,它包含的阶段有 pre-clean、clean 和 post-clean。
当用户调用 pre-clean的时候,只有pre-clean 阶段得以执行;
当用户调用 clean 的时候,pre-clean 和clean 阶段会得以顺序执行,
当用户调用 post-clean 的时候,pre-clean、clean 和 post-clean 会得以顺序执行
clean 生命周期
clean 生命周期的目的是清理项目,它包含三个阶段:
1)pre-clean 执行一些清理前需要完成的工作
2)clean 清理上一次构建生成的文件。
3)post-clean 执行一些清理后需要完成的工作
default 生命周期
default 生命周期定义了真正构建时所需要执行的所有步骤,它是所有生命周期中最核心的部分,其包含的阶段如下,这里笔者只对重要的阶段进行解释:
validate
initialize
generate-sourcesprocess-sources 处理项目主资源文件。一般来说,是对 src/main/resources 目录的内容进行变量替换等工作后,复制到项目输出的主casspath 目录中。generate-resources
process-resources
compile 编译项目的主源码。一般来说,是编译src/main/java目录下的Java文件至项目输出的主classpath 日录中
process-classes
generate-test-sources
process-test-sources 处理项目测试资源文件。一般来说,是对 src/test/resources 目录的内容进行变量替换等工作后,复制到项目输出的测试classpath 目录中。
generate-test-resources
process-test-resources
test-compile 编译项目的测试代码。一般来说,是编译 src/test/java 目录下的Java文件至项目输出的测试classpath 目录中。
process-test-classes
test 使用单元测试框架运行测试,测试代码不会被打包或部署
prepare-package
package 接受编译好的代码,打包成可发布的格式,如JARpre-integration-test
integration-test
post-integration-test
verify
install 将包安装到Maven 本地仓库,供本地其他 Maven 项目使用。
deploy 将最终的包复制到远程仓库,供其他开发人员和 Maven 项目使用。
可以参阅官方的解释:http://maven.apache. org/guides/introduc-tion/introduction-to-the-lifecycle. html
site 生命周期
site 生命周期的目的是建立和发布项目站点,Maven 能够基于 POM 所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:
pre-site 执行一些在生成项目站点之前需要完成的工作
site 牛成项目站点文档。
post-site 执行一些在生成项目站点之后需要完成的工作
site-deploy 将生成的项目站点发布到服务器上。

【命令行与生命周期】

命令行与生命周期
从命令行执行 Maven 任务的最主要方式就是调用 Maven 的生命周期阶段。
需要注意的是,各个生命周期是相互独立的,而一个生命周期的阶段是有前后依赖关系的。
下面以一些常见的 Maven 命令为例,解释其执行的生命周期阶段:
$mvn clean:该命令调用 clean 生命周期的 clean 阶段。实际执行的阶段为 clean 生命周期的 pre-clean 和clean 阶段。
$mvn test:该命令调用 default 生命周期的 test 阶段。实际执行的阶段为default 生命周期的 validate、initialize 等,直到 test 的所有阶段。
Smvn clean install:该命令调用 clean 生命周期的 clean 阶段和 default 生命周期的 install 阶段。
实际执行的阶段为 clean 生命周期的 pre-clean、clean 阶段,以及 default 生命周期的从 validate 至install 的所有阶段。
该命令结合了两个生命周期,在执行真正的项目构建之前清理项目是一个很好的实践。
$mvn clean deploy site-deploy: 该命令调用clean 生命周期的 clean 阶段、default 生命周期的 deploy 阶段,以及 site 生命周期的 site-deploy 阶段。
实际执行的阶段为 clean生命周期的 pre-clean、clean 阶段,default 生命周期的所有阶段,以及 site 生命周期的所有阶段。
该命令结合了 Maven 所有三个生命周期,且 deploy 为 default 生命周期的最后一个阶段,
site-deploy 为 site 生命周期的最后一个阶段。

【自定义绑定插件】

<build>
    <plugins>
        <plugin>
            <groupId >org.apache.maven.plugins < /groupId >
            <artifactId>maven-source-plugin < /artifactId>
            <version>2.1.1 < /version >
            <executions >
                <execution >
                    <id>attach-sources < /id>
                    <phase >verify < /phase >
                    <goals >
                        <goal>jar-no-fork< /goal >
                    < /goals >
                < /execution >
            < /executions >
        < /plugin >
    < /plugins >
</build>
上述配置中,除了基本的插件坐标声明外,还有插件执行配置,executions 下每个execution 子元素可以用来配置执行一个任务。
该例中配置了一个 id 为 attach-sources 的任务通过 phrase 配置将其绑定到 veriy 生命周期阶段上,
再通过 goals 配置指定要执行的插件目标。至此,自定义插件绑定完成。
当执行 verify 生命周期阶段的时候,maven-source-plugin: jar-no-fork 会得以执行,它会创建一个以-sources.jar 结尾的源码文件包。

【使用maven-help-plugin查看详细信息】

S mvn help:describe-Dplugin = org.apache.maven.plugins:maven-source-plugin:
2.1.1 -Ddetail
在描述插件的时候,还可以省去版本信息,让 Maven 自动获取最新版本来进行表述例如:
S mvn help:describe-Dplugin = org.apache.maven.plugins:maven-compiler-plugin
进一步简化,可以使用插件目标前缀替换坐标。例如:S mvn help:describe-Dplugin =compiler
如果想仅仅描述某个插件日标的信息,可以加.上 goal 参数:
第7章生命周期和插件109
S mvn help:describe-Dplugin =compiler-Dgoal = compile
如果想让 maven-help-plugin 输出更详细的信息,可以加上detail 参数:
S mvn help:describe-Dplugin =compiler -Ddetail

【插件配置】

1.命令行配置
例如,maven-surefire-plugin 提供了一个 maven.test.skip 参数,当其值为 true 的时候,就会跳过执行测试。于是,在运行命令的时候,加上如下-D 参数就能跳过测试:
S mvn install-Dmaven.test.skip =true

2.pom中插件全局配置
用户可以在声明插件的时候,对此插件进行一个全局的配置。也就是说,所有该基于该插件目标的任务,都会使用这些配置。例如,我们通常会需要配置 maven-compiler-plugin 告诉它编译 Java 1.5 版本的源文件,生成与JVM 15 兼容的字节码文件
<build>
    <plugins>
        <plugin >
            <groupId >org.apache.maven.plugins < /groupId>
            <artifactId>maven-compiler-plugin < /artifactId>
            <version>2.1 < /version >
            < configuration >
                < source >1.5 < /source >
                <target>1.5 </target >
            < /configuration >
        </plugin >
    < /plugins >
</build>

3.除了为插件配置全局参数,用户还可以为某个插件任务配置特定参数。
<build>
    <plugins>
        <plugin>
            <groupId >org.apache.maven.plugins < /groupId >
            <artifactId>maven-antrun-plugin </artifactId>
            <version>1.3 </version >
            <executions >
                <execution>
                    <id>ant-validate < /id >
                    < phase >validate < /phase >
                    <goals>
                        <goal >run < /goal >
                    </goals>
                    < configuration >
                        <tasks >
                            <echo >I'm bound to validate phase.< /echo >
                        < /tasks >
                    < /configuration >
                < /execution >
                <execution>
                    <id >ant-verify < /id>
                    <phase >verify < /phase >
                    <goals >
                        <goal >run < /goal >
                    < /goals >
                    <cconfiquration >
                        <tasks >
                            <echo > I'm bound to verify phase.< /echo >
                        < /tasks >
                    < /confiquration >
                < /execution >
            < /executions >
        < /plugin >
    < /plugins >
</bui1d >

【获取插件信息】

仅仅理解如何配置使用插件是不够的。当遇到一个构建任务的时候,用户还需要知道去哪里寻找合适的插件,以帮助完成任务。
基本上所有主要的 Maven 插件都来自 Apache 和 Codehaus。
详细的列表可以在这个地址得到: http://maven.apache.org/plugins/index.html
所有官方插件能在这里下载:http://repolmaven.org/maven2/org/apache/maven/
除了 Apache 上的官方插件之外,托管于 Codehaus 上的 Mojo 项目也提供了大量了 Maven 插件,详细的列表可以访问:http://mojo.codehaus.org/plugins.html。
需要注意的是这些插件的文档和可靠性相对较差,在使用时,如果遇到问题,往往只能自己去看源代码
所有 Codehaus 的 Maven 插件能在这里下载: http://repository.codehaus.org/org/code-haus/mojo/

【插件仓库】

与依赖构件一样,插件构件同样基于坐标存储在 Maven仓库中。在需要的时候,Maven会从本地仓库寻找插件,如果不存在,则从远程仓库查找。找到插件之后,再下载到本地仓库使用。
<pluginRepositories >
    <pluginRepository >
        <id>central < /id>
        <name >Maven Plugin Repository < /name >
        <url>http://repol.maven.org /maven2 < /url>
        <layout >default < /layout >
        <snapshots>
            <enabled > false < /enabled>
        < /snapshots >
        <releases >
            <updatePolicy >never < /updatePolicy >
        < /releases >
    < /pluginRepository >
< /pluginRepositories >

【解析插件版本】

为了简化插件的配置和使用,在用户没有提供插件版本的情况下,Maven 会自
动解析插件版本。
首先,Maven 在超级POM中为所有核心插件设定了版本,
超级POM是所有Maven 项目的父POM,所有项目都继承这个超级 POM的配置,
因此,即使用户不加任何配置,Maven使用核心插件的时候,它们的版本就已经确定了。
这些插件包括 maven-clean-plugin、maven-compiler-plugin maven-surefire-plugin 等。
如果用户使用某个插件时没有设定版本,而这个插件又不属于核心插件的范畴,Maven就会去检查所有仓库中可用的版本,然后做出选择。以maven-compiler-plugin 为例,它在中央库的仓库元数据为 htp://repol. maven.org/maven2/org/apache/maven/plugins/maven-compiler-plugin/maven-metadataxml

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值