maven-笔记

来源:互联网 发布:潍坊知行学校 编辑:程序博客网 时间:2024/06/08 19:13

Maven - 构建生命周期

什么是构建生命周期

构建生命周期是一组阶段的序列(sequence of phases),每个阶段定义了目标被执行的顺序。这里的阶段是生命周期的一部分。
举例说明,一个典型的 Maven 构建生命周期是由以下几个阶段的序列组成的:

    prepare-resources    资源拷贝    本阶段可以自定义需要拷贝的资源    compile    编译    本阶段完成源代码编译    package    打包    本阶段根据 pom.xml 中描述的打包配置创建 JAR / WAR 包    install    安装    本阶段在本地 / 远程仓库中安装工程包

一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大的构建的一部分和其它目标一起运行。一个目标是Maven中的一个“工作单元(unit of work)”。目标的例子包括Compiler插件中的compile目标,它用来编译项目中的所有源文件,或者Surefire插件中的test目标,用来运行单元测试。

注意:当提到一个插件目标的时候,我们常常用速记符号:pluginId:goalId。例如,当提到Archetype插件的create目标的时候,我们写成archetype:create。archetype 是插件create 是目标

当 Maven 开始构建工程,会按照所定义的阶段序列的顺序执行每个阶段注册的目标。Maven 有以下三个标准的生命周期:
clean
default(or build)
site

Default (or Build) 生命周期
这是 Maven 的主要生命周期,被用于构建应用。包括下面的 23 个阶段。

    生命周期阶段    描述    validate    检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到。    initialize    初始化构建状态,例如设置属性。    generate-sources    生成编译阶段需要包含的任何源码文件。    process-sources    处理源代码,例如,过滤任何值(filter any value)。    generate-resources    生成工程包中需要包含的资源文件。    process-resources    拷贝和处理资源文件到目的目录中,为打包阶段做准备。    compile    编译工程源码。    process-classes    处理编译生成的文件,例如 Java Class 字节码的加强和优化。    generate-test-sources    生成编译阶段需要包含的任何测试源代码。    process-test-sources    处理测试源代码,例如,过滤任何值(filter any values)。    test-compile    编译测试源代码到测试目的目录。    process-test-classes    处理测试代码文件编译后生成的文件。    test    使用适当的单元测试框架(例如JUnit)运行测试。    prepare-package    在真正打包之前,为准备打包执行任何必要的操作。    package    获取编译后的代码,并按照可发布的格式进行打包,例如 JAR、WAR 或者 EAR 文件。    pre-integration-test    在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量。    integration-test    处理和部署必须的工程包到集成测试能够运行的环境中。    post-integration-test    在集成测试被执行后执行必要的操作。例如,清理环境。    verify    运行检查操作来验证工程包是有效的,并满足质量要求。    install    安装工程包到本地仓库中,该仓库可以作为本地其他工程的依赖。    deploy    拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程

Maven - 插件

Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:
创建 jar 文件
创建 war 文件
编译代码文件
代码单元测试
创建工程文档
创建工程报告
插件通常提供了一个目标的集合,并且可以使用下面的语法执行:
mvn [plugin-name]:[goal-name]

常用插件的列表:插件    描述clean    构建之后清理目标文件。删除目标目录。compiler    编译 Java 源文件。surefile    运行 JUnit 单元测试。创建测试报告。jar    从当前工程中构建 JAR 文件。war    从当前工程中构建 WAR 文件。javadoc    为工程生成 Javadoc。antrun    从构建过程的任意一个阶段中运行一个 ant 任务的集合。

常见插件介绍
http://shmilyaw-hotmail-com.iteye.com/blog/2170300
http://www.cnblogs.com/crazy-fox/archive/2012/02/09/2343722.html

外部依赖
工程依赖一个本地的jar,那么可以选择将该jar放到系统工程的src/lib下,那么在pom文件中可以如下:

      <dependency>             <groupId>ldapjdk</groupId>             <artifactId>ldapjdk</artifactId>             <scope>system</scope>             <version>1.0</version>             <systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>          </dependency>
外部依赖(library jar location)能够像其他依赖一样在 pom.xml 中配置。指定 groupId 为 library 的名称。指定 artifactId 为 library 的名称。指定作用域(scope)为系统。指定相对于工程位置的系统路径。

依赖范围
传递依赖发现可以通过使用如下的依赖范围来得到限制:
范围 描述
compile 编译阶段 该范围表明相关依赖是只在工程的类路径下有效。默认取值。
provided 供应阶段 该范围表明相关依赖是由运行时的 JDK 或者 网络服务器提供的。
runtime运行阶段 该范围表明相关依赖在编译阶段不是必须的,但是在执行阶段是必须的。
test 测试阶段 该范围表明相关依赖只在测试编译阶段和执行阶段。
system 系统阶段 该范围表明你需要提供一个系统路径。
import 导入阶段 该范围只在依赖是一个 pom 里定义的依赖时使用。同时,当前工程的POM 文件的 部分定义的依赖关系可以取代某特定的 POM。

原创粉丝点击