Maven工具

0x01 概述

Maven 是一个项目管理和整合工具。Maven 为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能够自动完成工程的基础构建配置,因为 Maven 使用了一个标准的目录结构和一个默认的构建生命周期。

Maven 的主要目的是为开发者提供:一个可复用、可维护、更易理解的工程综合模型;与这个模型交互的插件或者工具。

0x02 目录结构

Maven 工程结构和内容被定义在一个 xml 文件中——pom.xml,是 Project Object Model (POM) 的简称,此文件是整个 Maven 系统的基础组件。

目录结构:

1

0x03 环境配置

使用系统属性设置环境变量(maven所在目录为C:\Program Files\Apache Software Foundation\apache-maven-3.2.5):

M2_HOME=C:\Program Files\Apache Software Foundation\apache-maven-3.2.5
M2=%M2_HOME%\bin
MAVEN_OPTS=-Xms256m -Xmx512m
Path变量后加 %M2%

验证

命令行输入:

mvn --version

0x04 POM

pom.xml放在根目录下。POM 包含了关于工程和各种配置细节的信息,也包含了goal和插件。当执行一个任务或者goal时,Maven 会查找当前目录下的 POM,从其中读取所需要的配置信息,然后执行goal。

能够在 POM 中设置的一些配置如下:

  • project dependencies
  • plugins
  • goals
  • build profiles
  • project version
  • developers
  • mailing list

POM.xml 的根元素是 project,它有三个主要的子节点:

2

所有的 POM 都继承自一个父 POM(无论是否显式定义了这个父 POM)。父 POM 也被称作 Super POM,它包含了一些可以被继承的默认设置。

Maven 使用 effective pom(Super pom 加上工程自己的配置)来执行相关的goal,它帮助开发者在 pom.xml 中做尽可能少的配置,当然这些配置可以被方便的重写。

查看 Super POM 默认配置的一个简单方法是执行以下命令:

mvn help:effective-pom

0x05 构建生命周期

当 Maven 开始构建工程,会按照所定义的phase序列的顺序执行每个phase注册的goal。Maven 有以下三个标准的生命周期:

  • clean
  • default(or build)
  • site

当需要在某个特定phase之前或之后执行goal时,可以使用 pre 和 post 来定义这个goal。

goal表示一个特定的、对构建和管理工程有帮助的任务。它可能绑定了 0 个或多个构建phase。没有绑定任何构建phase的goal可以在构建生命周期之外被直接调用执行。执行的顺序依赖于goal和构建phase被调用的顺序。

例如:

mvn clean dependency:copy-dependencies package

这里的 clean phase将会被首先执行,然后 dependency:copy-dependencies goal会被执行,最终 package phase被执行。

5.1 Clean 生命周期

当我们执行 mvn post-clean 命令时,Maven 调用 clean 生命周期,它包含以下phase。

  • pre-clean
  • clean
  • post-clean

Maven 的 clean goal(clean:clean)绑定到了 clean 生命周期的 clean phase。它的 clean:clean goal通过删除构建目录删除了构建输出。所以当 mvn clean 命令执行时,Maven 删除了构建目录。

5.2 Default (or Build) 生命周期

Maven 的主要生命周期,被用于构建应用。包括下面的 23 个phase。

3

5.3 Site 生命周期

Site 插件一般用来创建新的报告文档、部署站点等。包含如下phase:

  • pre-site
  • site
  • post-site
  • site-deploy

0x06 构建配置文件

构建配置文件是一组配置的集合,用来设置或者覆盖 Maven 构建的默认配置。使用构建配置文件,可以为不同的环境定制构建过程,例如 Producation 和 Development 环境。

Profile 在 pom.xml 中使用 activeProfiles / profiles 元素指定,并且可以用很多方式触发。Profile 在构建时修改 POM,并且为变量设置不同的goal环境(例如,在开发、测试和产品环境中的数据库服务器路径)。

Profile 主要有三种类型。

  • Per Project 定义pom.xml 中
  • Per User 定义在 Maven 设置文件中 (%USER_HOME%/.m2/settings.xml)
  • Global 定义在 Maven 全局配置文件中 (%M2_HOME%/conf/settings.xml)
  • Profile 能够通过几种不同的方式激活。
  • 显式使用命令控制台输入
  • 通过 maven 设置
  • 基于环境变量(用户 / 系统变量)
  • 操作系统配置(例如,Windows family)
  • 现存 / 缺失 文件
  • Profile 激活示例

0x07 仓库

仓库是一个位置(place),例如目录,可以存储所有的工程 jar 文件、library jar 文件、插件或任何其他的工程指定的文件。

Maven 仓库有三种类型:

  • 本地(local)
  • 中央(central)
  • 远程(remote)
7.1 本地仓库

Maven 本地仓库是机器上的一个文件夹。它在你第一次运行任何 maven 命令的时候创建。

Maven 本地仓库保存你的工程的所有依赖(library jar、plugin jar 等)。

Maven 本地仓库默认被创建在 %USER_HOME% 目录下。要修改默认位置,在 %M2_HOME%\conf 目录中的 Maven 的 settings.xml 文件中localRepository标签定义。

7.2 中央仓库

Maven 中央仓库是由 Maven 社区提供的仓库,其中包含了大量常用的库。这个仓库由 Maven 社区管理,不需要配置,需要通过网络才能访问。

要浏览中央仓库的内容,maven 社区提供了一个 URL。使用这个仓库,开发人员可以搜索所有可以获取的代码库。

7.3 远程仓库

远程仓库是开发人员自己定制仓库,包含了所需要的代码库或者其他工程中用到的 jar 文件。

举例说明,使用下面的 POM.xml,Maven 将从远程仓库中下载该 pom.xml 中声明的所依赖的(在中央仓库中获取不到的)文件。

<project xmlns="http://maven.apache.org/POM/4.0.0"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.companyname.projectgroup</groupId>
   <artifactId>project</artifactId>
   <version>1.0</version>
   <dependencies>
      <dependency>
         <groupId>com.companyname.common-lib</groupId>
         <artifactId>common-lib</artifactId>
         <version>1.0.0</version>
      </dependency>
   <dependencies>
   <repositories>
      <repository>
         <id>companyname.lib1</id>
         <url>http://download.companyname.org/maven2/lib1</url>
      </repository>
      <repository>
         <id>companyname.lib2</id>
         <url>http://download.companyname.org/maven2/lib2</url>
      </repository>
   </repositories>
</project>

执行 Maven 构建命令时,Maven查找依赖的顺序:

  1. 在本地仓库中搜索,如果找不到:2,如果找到:则执行其他操作。
  2. 在中央仓库中搜索,如果找不到,并且有一个或多个远程仓库已经设置,4,如果找到:则下载到本地仓库中已被将来引用。
  3. 如果远程仓库没有被设置,停滞处理并抛出错误(无法找到依赖的文件)。
  4. 在一个或多个远程仓库中搜索依赖的文件,如果找到:则下载到本地仓库已被将来引用,否则 :停止处理并抛出错误(无法找到依赖的文件)。

0x08 Maven - 插件

Maven 实际上是一个依赖插件执行的框架,每个任务实际上是由插件完成。Maven 插件通常被用来:

  • 创建 jar 文件
  • 创建 war 文件
  • 编译代码文件
  • 代码单元测试
  • 创建工程文档
  • 创建工程报告

插件通常提供了一个goal的集合,并且可以使用下面的语法执行:

mvn [plugin-name]:[goal-name]

Maven 提供了下面两种类型的插件:

4

下面是一些常用插件的列表:

5

插件是在 pom.xml 中使用 plugins 元素定义的。每个插件可以有多个goal。

你可以定义phase,插件会使用它的 phase 元素开始处理。我们已经使用了 clean phase。

参考自 http://wiki.jikexueyuan.com/project/maven/

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值