Maven学习(三)
maven相关概念
maven坐标
Maven世界拥有大量构建,当我们需要引用依赖包是,需要用一个用来唯一标识去确定唯一的一个构建。如果拥有了统一规范,就可以把查找工作交给机器。
类似于空间找点的坐标一样,maven坐标应运而生,为各种构件引入了秩序:

- groupId:组织标识名(简单理解成 包名)
- artifactId:项目名称
- version:项目的当前版本
- packaging:项目的打包方式,最为常见的jar和war两种(项目中继承的话,为pom)
- classifier: 该元素用来帮助定义构建输出的一些附属构件(不能被直接定义)
注:groupId、artifactId、version、packaging是必须定义的,classifier是不能被直接定义的,因为附属构件不是项目直接默认生成的,而是由附加的插件帮助生成的。
依赖项管理
依赖性管理,在pom.xml文件中<dependency></dependency>中
依赖项示例
pom.xml文件中:
<!--项目要使用到junit的jar包,所以在这里添加junit的jar包的依赖-->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency> <!--项目要使用到ConsoleHello的jar包,在这里添加ConsoleHello的jar包的依赖-->
<dependency>
<groupId>com.lsk.mavenCode</groupId>
<artifactId>ConsoleHello</artifactId>
<version>SNAPSHOT-0.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
依赖范围
依赖范围<scope></scope>用来控制依赖和编译、测试、运行的classpath的关系。
主要的是三种依赖关系如下:
1.compile: 默认编译依赖范围。->对于编译、测试、运行三种classpath都有效
2.test:测试依赖范围。->只对于测试classpath有效
3.provided:已提供依赖范围。->对于编译、测试的classpath都有效,但对于运行无效。因为由容器已经提供,例:servlet-api
4.runtime: 运行时提供。(如:JDBC驱动)
依赖传递
若A依赖B,B依赖C,则A也依赖于C(A对于C为间接依赖)
仓库管理
仓库用来统一存储所有Maven共享构建的位置,
根据maven坐标,目录方式: groupId/artifactId/version/artifactId-version.packaging 就可以唯一确定一个构建。
每个用户只有一个本地仓库,默认是在${user.home}/.m2/repository/,${user.home}代表的是用户目录,例:

1、Maven默认的远程仓库:URL:http://search.maven.org/,我们需要引用外部的包时,可以从上面查到相关的GroupId、版本号等信息;
2、私服:是一种特殊的远程仓库,架设在局域网内的仓库(一般公司内部都会有一个自己的私服)
生命周期
Maven有三种相互独立的标准生命周期,这三种生命周期分别是:
1、Clean Lifecycle(清洁生命周期):在进行真正的构建之前进行一些清理工作。
2、Default<Build> Lifecycle(默认<或生成>生命周期 ):构建的核心部分:编译、测试、打包、部署等等。
3、Site Lifecycle(网站生命周期 ) 生成项目报告、站点、发布站点。
说明下:它们是相互独立的,你可以仅仅调用clean来清理工作目录、仅仅调用site来生成站点。当然也可以组合命令直接运行 mvn clean install site 运行所有这三种生命周期。
每种生命周期都由一组阶段(Phase)组成。我们平时输入的命令总会对应于一个特定的阶段(真正执行时,包含此生命周期中的这个阶段及其之前的所有阶段),比如:
运行mvn clean ,clean是Clean Lifecycle的一个阶段。他还有pre-clean阶段、clean阶段、post-clean阶段。
"mvn clean" 中的clean就是上面的clean及其同一种生命周期前的所有阶段。
Clean Lifecycle
1.pre-clean 执行一些需要在clean之前完成的工作
2.clean 移除所有上一次构建生成的文件
3.post-clean 执行一些需要在clean之后立刻完成的工作
Default<Build> Lifecycle
1.pre-site 执行一些需要在生成站点文档之前完成的工作
2.site 生成项目的站点文档
3.post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
4.site-deploy 将生成的站点文档部署到特定的服务器上
这里经常用到的是site阶段和site-deploy阶段,用以生成和发布Maven站点,这可是Maven相当强大的功能,Manager比较喜欢,文档及统计数据自动生成。
Default<Build> Lifecycle
Default<Build> Lifecycle是Maven生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中,用于构建应用程序。它有以下 23 个阶段。
| 生命周期阶段 | 描述 |
|---|---|
| validate | 验证项目是否正确,并且所有必要的信息可用于完成构建过程 |
| initialize | 建立初始化状态,例如设置属性 |
| generate-sources | 产生任何的源代码包含在编译阶段 |
| process-sources | 处理源代码,例如,过滤器值 |
| generate-resources | 包含在包中产生的资源 |
| process-resources | 复制和处理资源到目标目录,准备打包阶段 |
| compile | 编译该项目的源代码 |
| process-classes | 从编译生成的文件提交处理,例如:Java类的字节码增强/优化 |
| generate-test-sources | 生成任何测试的源代码包含在编译阶段 |
| process-test-sources | 处理测试源代码,例如,过滤器任何值 |
| test-compile | 编译测试源代码到测试目标目录 |
| process-test-classes | 处理测试代码文件编译生成的文件 |
| test | 运行测试使用合适的单元测试框架(JUnit) |
| prepare-package | 执行必要的任何操作的实际打包之前准备一个包 |
| package | 提取编译后的代码,并在其分发格式打包,如JAR,WAR或EAR文件 |
| pre-integration-test | 完成执行集成测试之前所需操作。例如,设置所需的环境 |
| integration-test | 处理并在必要时部署软件包到集成测试可以运行的环境 |
| pre-integration-test | 完成集成测试已全部执行后所需操作。例如,清理环境 |
| verify | 运行任何检查,验证包是有效的,符合质量审核规定 |
| install | 将包安装到本地存储库,它可以用作当地其他项目的依赖 |
| deploy | 复制最终的包到远程仓库与其他开发者和项目共享 |
有涉及到Maven 生命周期值得一提几个重要概念:
当一个阶段是通过 Maven命令调用,例如:mvn compile,只有阶段到达并包括这个阶段才会被执行。
不同的 Maven 目标绑定到 Maven生命周期的不同阶段这是这取决于包类型(JAR/WAR/EAR)。
maven插件
maven插件机制是完全依赖Maven的生命周期的。
Maven 提供以下两种类型插件:
| 类型 | 描述 |
|---|---|
| 构建插件 | 在生成过程中执行,并在 pom.xml 中的<build/> 元素进行配置 |
| 报告插件 | 在网站生成期间执行,在 pom.xml 中的 <reporting/> 元素进行配置 |
以下是一些常见的插件列表:
| 插件 | 描述 |
|---|---|
| clean | 编译后的清理目标,删除目标目录 |
| compiler | 编译 Java 源文件 |
| surefile | 运行JUnit单元测试,创建测试报告 |
| jar | 从当前项目构建 JAR 文件 |
| war | 从当前项目构建 WAR 文件 |
| javadoc | 产生用于该项目的 Javadoc |
| antrun | 从构建所述的任何阶段运行一组 Ant 任务 |
- Maven的核心仅仅定义了抽象的生命周期,具体任务是交由插件完成。
- 每个插件都可以实现多个功能,每个功能就是一个插件目标。
- Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务,例如compile就是插件maven-compiler-plugin的一个插件目标。
参考:
http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html
http://www.yiibai.com/maven/maven_plugins.html
http://blog.csdn.net/wanghantong/article/details/36427165
Maven学习(三)的更多相关文章
- Maven学习 (三) 使用m2eclipse创建web项目
1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 3.下一步默认配置,使用默认的工作空间,或者你可以自己选择其他的空间 ...
- maven学习三
做项目时使用maven构建项目已经是现在的流行做法了.那么maven的作用是什么呢?maven中的几个常用的命令都有什么用?下面我们来看一下. maven最大的作用就是用于对项目中jar包依赖的统一管 ...
- Maven学习 三 Maven与Eclipse结合使用
一检查是否已经集成了Maven 现在的Eclipse一般都是集成了Maven,如果确定集成开发工具是否集成了Maven, Windows->preferences->Maven,查看是否已 ...
- Maven学习(三)-----Maven本地资源库
Maven本地资源库 Maven的本地资源库是用来存储所有项目的依赖关系(插件jar和其他文件,这些文件被Maven下载)到本地文件夹.很简单,当你建立一个Maven项目,所有相关文件将被存储在你的M ...
- maven学习3,如何创建一个web项目
Maven学习 (三) 使用m2eclipse创建web项目 1.首先确认你的eclipse已经安装好m2eclipse的环境,可以参照上两篇Maven学习内容 2.新建一个maven的项目 ...
- Maven学习 四 Eclipse与Maven结合的配置
本问承接Maven学习 三 第一步:配置本地仓库 (1)默认配置 查看 本地仓库的位置是在一个叫做setting.xml的配置文件中设置,如果我们不配置,会使用开发工具自己集成的一个setting.x ...
- (转)Maven学习总结(三)——使用Maven构建项目
孤傲苍狼 只为成功找方法,不为失败找借口! Maven学习总结(三)——使用Maven构建项目 maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项目的 ...
- Maven学习(三)生命周期
maven有三套生命周期 1.clean 清理项目 2.default 构建项目 3.site 建立项目站点 每套生命周期都包含了一些阶段,这些阶段是有序的,后 ...
- Maven学习小结(三 基本概念)
1.Maven POM POM(Project Object Model)项目对象模型,是用Maven来管理项目里的一个叫做pom.xml的文件.所有的项目配置信息都被定义在这个文件中, 通过这个文件 ...
- Maven学习(四)-- 生命周期和插件
标签(空格分隔): 学习笔记 Maven生命周期是抽象的,不做任何实际的工作,在Maven的设计中,实际的任务都交由插件来完成. 每个构件步骤都可以绑定一个或者多个插件行为,而且Maven为大多数构建 ...
随机推荐
- 不可不知的 Android strings.xml 那些事
相信 strings.xml 已经是大家在 Android 开发中最熟悉的文件之一了,但其实它也有很多需要注意的地方和一些小技巧,知道了这些可以让你的 Android 应用更加规范易用,大家来看看吧. ...
- JS滚动加载
var one = true;//设置一个全局变量 $(window).scroll(function () { var hight = document.body.scrollHeight - do ...
- 因为文件组 'PRIMARY' 已满 解决办法
简介:文件组 'PRIMARY' 已满 一般虚拟主机提供商是通过限制数据库文件的大小来实现提供定制的数据库空间的.当你把从虚拟数据库空间备份下来的文件恢复到自己的服务器上时,这个限制还是存在的.找到数 ...
- struts2 之 【struts2简介,struts2开发步骤,struts2详细配置,struts2执行流程】
入门框架学习避免不了的问题: 1. 什么是框架? 简单的说,框架就是模板,模子,模型.就是一个可重用的半成品. 2. 如何学习框架? 学习框架其实就是学习规则,使用框架就是遵循框架的规则,框架是可变的 ...
- key-value存储Redis
Key-value数据库是一种以键值对存储数据的一种数据库,(类似java中的HashMap)每个键都会对应一个唯一的值. Redis与其他 key - value 数据库相比还有如下特点: Redi ...
- 【Tomcat源码学习】-3.应用管理
通过上一节我们完成了对容器进行了加载.初始化.启动,而对于应用的加载部分独立出来,本节进行单独的讲解 一.应用加载流程 1)应用识别,Context创建 在Host启动后,会调用Host的监听Ho ...
- 计算单词出现的次数--linq
1.直接给出代码:声明数据,也可以是txt等文件,通过File类的静态方法读取其中的文本,再转换成List<string>数组. private static List<string ...
- Java 设计模式(四)-工厂方法模式 (FactoryMethod Pattern)
1 概念定义 1.1 定义 定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 1.2 类型 创建类模式 2 原理特征 2.1 类 ...
- Linux下修改环境终端提示符
Linux修改环境变量PS1(命令行提示符),可以使用vi编辑/etc/bashrc或/etc/profile文件,在最后加上: export PS1='[\u@\h \W]\$ ' 即可,其中\u显 ...
- LeetCode 376. Wiggle Subsequence 摆动子序列
原题 A sequence of numbers is called a wiggle sequence if the differences between successive numbers s ...