maven

Maven

Apache Maven是一款软件工程管理和整合工具。基于工程对象模型(POM)的概念,通过一个中央信息管理模块,Maven能够管理项目的构建、报告和文档。

概述

Maven是一个项目管理和整合工具。Maven为开发者提供了一套完整的构建生命周期框架。开发团队几乎不用花多少时间就能自动完成工程的基础构建配置,因为Maven使用了一个标准的目录结构和一个默认的构建生命周期。
在有多个开发团队环境的情况下,Maven能够在很短的时间内使得每项工作都按照标准进行。因为大部分的工程配置操作都非常简单并且可以复用,在创建报告、检查、构建和测试自动配置时,Maven可以让开发者的工作变得更简单。
Maven可以帮助开发者完成以下工作:

  • 构建
  • 文档生成
  • 报告
  • 依赖
  • SCMs
  • 发布
  • 分发
  • 邮件列表

总体来说,Maven简化了工程的构建过程,并对其标准化。它无缝衔接了编译、发布、文档生成、团队合作和其他任务。Maven提高了重用性,负责了大部分构建相关的任务。

maven目录结构

src
-main
-java
-package
-test
-java
-package
resources

maven常用命令

mvn -v 查看maven版本
mvn compile 编译
mvn test 测试
mvn package 打包
mvn clean 清除target
mvn install 安装jar包到本地仓库中

一个完整的项目构建过程包括:
清理、编译、测试、打包、集成测试、验证、部署

maven生命周期
clean(pre-clean、clean、post-clean)
default(compile、test、package、install)
site:生成项目站点(pre-site、site、post-site、site-deploy)

使用mvn archetype:generate 这个插件可以帮助自动生成目录结构

Maven配置

略略略

POM

POM(Preject Object Model)代表工程对象模型。它是Maven工作的基本组建,是一个xml文件。被放在工程根目录下,文件名为pom.xml
POM包含了关于工程的各种配置细节的信息,Maven使用这些信息构建工程。
POM也包含了目标和插件。当执行一个任务或目标时,Maven会找到当前目录下的POM,从其中读取所需要的配置信息,然后执行目标。能够在POM中设置的配置如下:

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

在创建POM之前,我们首先确定工程组(groupId),及其名称(artifactId)和版本,在仓库中这些属性是工程的唯一标识。

<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.project-group</groupId>
    <artifactId>project</artifactId>
    <version>1.0</version>
</project>

需要说明的是每个工程应该只有一个POM文件。

  • 所有的POM文件需要project元素和三个必须的字段:groupid, artifactId, version
  • 在仓库中的工程标识为groupId:artifacctId:version
  • POM.xml的根元素是project,它有三个主要的子节点:
节点描述
groupId工程组的标识。它在一个组织或者项目中通常是唯一的。
artifactId工程的标识。通常是工程的名称。(项目名+模块名)
version版本号,第一个0表示大版本号,第二个0表示分支版本号,第三个0表示小版本号,snapshot快照,alpha内部测试,beta公测,Release稳定,GA正式发布
packaging打包方式,默认是jar,也可以是war、zip

构建生命周期

此部分内容参考自maven声明周期详解
Maven强大的一个重要原因是它有一个十分完善的声明周期模型(lifecycle)。这个声明周期可以从两方面理解:

  • 第一,运行maven的每个步骤都由它来定义,这种预设的默认行为使得我们使用maven变得简单,相比而言,ant的每个步骤都要你手工定义。
  • 第二,这个模型是一种标准,在不同的项目中,使用maven的接口是一样的,这样就不用去仔细理解每个项目的构建了。

maven有三套相互独立的声明周期。分别为:

  • clean lifecycle:在构建之前进行一些清理工作。
  • default lifecycle:构建的核心部分,编译,测试,打包,部署等待。
  • site lifecycle:生成项目报告,站点,发布站点。

每一套声明周期都由一系列的阶段(phase)组成。在一个生命周期中运行某个阶段的时候,它之前的所有阶段都会被运行。

clean生命周期的三个阶段:

  • pre-clean:执行一些需要在clean之前完成的工作
  • clean:移除所有上一次构建生成的文件
  • post-clean:执行一些需要在clean之后立刻完成的工作

site声明周期的各个阶段:

  • pre-site:执行一些需要在生成站点文档之前完成的工作。
  • site:生成项目的站点文档
  • post-site:执行一些需要在生成站点文档之后完成的工作,并未部署做准备
  • site-deploy:将生成的站点文档部署到特定的服务器上

default生命周期:

  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources
  • compile
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources 复制并处理资源文件至目标测试目录
  • test-compile 编译测试源代码
  • process-test-classes
  • test 使用合适的单元测试框架运行测试,这些测试不会被打包或部署
  • prepare-package
  • package 接受编译好的代码,打包成可发布的格式,如jar,war。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install 将包安装至本地仓库,以让其他项目依赖
  • deploy 将最终的包复制到远程仓库,以让其他开发人员参与项目共享

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

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

构建配置文件

Profile在pom.xml中使用activeProfiles/profiles元素制定,并且可以用多种方式出发。Profile在构建时修改POM,并且为变量设置不同的目标环境。
Profile主要有三种类型:

类型在哪里定义
Per Project定义在工程POM文件pom.xml中
Per User定义在Maven设置xml文件中(%USER_HOME%/.m2/setting.xml)
Global定义在Maven全局配置xml文件中(%M2_HOME%/conf/settings.xml)

仓库

在Maven中,仓库有三种类型:

  • 本地(local): Marven本地仓库保存工程所有依赖(library,plugin等)。当你运行一次Maven构建,Maven会自动下载所有依赖的jar文件到本地仓库中。
  • 中央(central): 中央仓库有Maven社区提供的仓库,其中包含大量的常用的库。
  • 远程(remote):如果Maven在中央仓库中欧找不到依赖的库文件,它会停止构建过程并输出错误信息到控制台。为了避免这种情况,Maven提供了远程仓库的概念,它是开发人员自己定制的仓库。包括了所需要的代码库或者其他工程中用到的jar文件。

Maven依赖搜索顺序:
当我们执行Maven构建命令时,Maven开始按照以下顺序查找依赖的库:
1. 在本地仓库中搜索
2. 在中央仓库中搜索
3. 如果远程仓库没有设置,Maven将停止并抛出错误
4. 在一个或多个远程仓库中搜索依赖的文件

依赖范围

compile、provided、runtime、test、system、import

使用maven在eclipse中创建java web项目

  1. 新建maven项目

    新建maven项目1

  2. 选择next,也可以通过自定义进行创建

    新建maven项目2

  3. 选择quickstart的archetype进行创建(网上很多都是选择webapp)

    新建maven项目3

  4. 输入groupid和artifactid等信息

    新建maven项目4

5.使用quickstart创建完成后的目录结构

新建maven项目5

  1. 选择项目的properties—>project facets—>convert to faceted form

    新建maven项目6

  2. 勾选Dynamic web module,并在further configuration available中进行配置

    新建maven项目7

  3. 将content directory中的内容改为src/main/webapp,并勾选自动生成web.xml。可能第一次会报错,第二次重试一次就可以了。

    新建maven项目8

  4. 修改完成后的目录结构如图所示

    新建maven项目9

  5. 添加resources目录结构

    新建maven项目10

  6. 右键项目的properties,选择deployment assembly,点击add

参考资料

[1]. maven官方手册
[2]. 极客学院wiki

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值