`
haitaohehe
  • 浏览: 12732 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
最近访客 更多访客>>
社区版块
存档分类
最新评论
阅读更多

一、Maven是什么?
     绝大部分Maven用户都称Maven是一个"构建工具":一个用来把源代码构建成可发布的构件的工具。 构建工程师和项目经理会说Maven是一个更复杂的东西:一个项目管理工具。那么区别是什么? 像Ant这样的构建工具仅仅是关注预处理,编译,打包,测试和分发。像 Maven 这样的一个项目管理工具提供了构建工具所提供功能的超集。 除了提供构建的功能,Maven还可以生成报告,生成Web站点,并且帮助推动工作团队成员间的交流。一个更正式的 Apache Maven 的定义: Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(ProjectLifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
二、Maven和ant的区别
     Ant在构建过程方面十分优秀,它是一个基于任务和依赖的构建系统。每个任务包含一组由 XML 编码的指令。有 copy 任务和 javac 任务,以及 jar 任务。在你使用 Ant的时候,你为 Ant 提供特定的指令以编译和打包你的输出。你必须明确告诉 Ant 你的源码在哪里,结果字节码你想存储在哪里,如何将这些字节码打包成 JAR 文件。当然,Maven还有更强大的功能,简言之,Maven是一个项目管理工具,ant是一个项目构建工具。
下面就项目构建方面对Maven和ant做下简单对比。
Apache Ant
• Ant 没有正式的约定如一个一般项目的目录结构,你必须明确的告诉 Ant 哪里去找源代码,哪里放置输出。随着时间的推移,非正式的约定出现了,但是它们还没有在产品中模式化。
• Ant 是程序化的,你必须明确的告诉 Ant 做什么,什么时候做。你必须告诉它去编译,然后复制,然后压缩。
• Ant 没有生命周期,你必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。
Apache Maven
• Maven 拥有约定,因为你遵循了约定,它已经知道你的源代码在哪里。它把字节码放到 target/classes ,然后在 target 生成一个 JAR 文件。
• Maven 是声明式的。你需要做的只是创建一个 pom.xml 文件然后将源代码放到默认的目录。Maven 会帮你处理其它的事情。
• Maven 有一个生命周期,当你运行 mvn install 的时候被调用。这条命令告诉 Maven 执行一系列的有序的步骤,直到到达你指定的生命周期。遍历生命周期旅途中的一个影响就是,Maven 运行了许多默认的插件目标,这些目标完成了像编译和创建一个 JAR 文件这样的工作。
三、为什么要使用Maven
1、工具可移植性/集成
像 Eclipse,NetBeans,和 InteliJ 这样的工具现在有共同的地方来找到项目的信息。在 Maven 出现之前,每个 IDE 都有不同的方法来存储实际上是自定义项目对象模型(POM)的信息。Maven 标准化了这种描述,而虽然每个 IDE 仍然继续维护它的自定义项目文件,但这些文件现在可以很容易的由模型生成。
2、标准的项目布局和项目结构生成器
一个标准的项目结构 

 

3、多项目支持
通过maven的坐标和依赖管理使用多个项目之间关系透明化。
4、丰富的插件支持
   Maven提供了丰富的插件,如Eclipse插m2eclipse,源代码控制软件CVS和SVN,持续集成工具Hudson等,Maven的丰富功能主要是通过插件来实现。

四、Maven中的重要概念

1、 项目对象模型(POM)
就像Make的Makefile,Ant的bulid.xml一样,Maven项目的核心是pom.xml。POM(Project Object Model,项目对象模型)定义了项目的基本信息,用于描述项目如何构建,声明项目依赖等。这个POM告诉Maven它正处理什么类型的项目,如何修改默认的行为来从源码生成输出。就好比一个Java Web应用有一个web.xml文件来描述,配置,及自定义该应用,一个Maven项目则通过一个 pom.xml文件定义。
一个简单的pom.xml



 

2、Maven坐标 (Coordinates) 及依赖管理 (Dependency Management)
   在Maven为构件引入坐标概念之前,我们无法使用任何一种方式来唯一标识所有这些构件,因此,当需要用到Spring Framework依赖的时候,大家会去Spring Framework网站上寻找,当需要Log4j依赖的时候,大家又会到Apache网站上寻找。又因为各个项目的风格迥异,大量的时间花费在搜索、浏览网页等工作上面,没有统一的规范、统一的法则、该工作就无法自动化。Maven定义了这样一组规则,世界上任何一个构件都可以使用Maven坐标唯一标识,Maven坐标的元素包括groupId、artifactId、version、packaging、classifier。现在只要提供正确的坐标元素,Maven就能找到对应的构件。
当一个项目依赖于另一个项目生成的构件,我们就说这个构件是一个依赖。在Java项目的情况下,这可以简单到比如一个项目依赖与外部的如Log4J或JUnit依赖。Maven对项目依赖进行了细化,可以通过坐标在pom文件进行详细的配置。

3、Maven生命周期 (Lifecycle)
Maven强大的一个重要的原因是它有一个十分完善的生命周期模型(lifecycle),这个生命周期可以从两方面来理解,第一,顾名思义,运行Maven的每个步骤都由它来定义的,这种预定义的默认行为使得我们使用Maven变得简单,相比而言,Ant的每个步骤都要你手工去定义。第二,这个模型是一种标准,在不同的项目中,使用Maven的接口是一样的,这样就不用去仔细理解每个项目的构建了,一般情况下,mvn clean install 这样的命令是通用的。
Maven默认的生命周期如下:
生命周期阶段 描述
validate 验证项目是否正确,以及所有为了完整构建必要的信息是否可用
generate-sources  生成所有需要包含在编译过程中的源代码
process-sources   处理源代码,比如过滤一些值
generate-resources  生成所有需要包含在打包过程中的资源文件
process-resources  复制并处理资源文件至目标目录,准备打包
compile   编译项目的源代码
process-classes 后处理编译生成的文件,例如对Java类进行字节码增强(bytecode enhancement)
generate-test-sources 生成所有包含在测试编译过程中的测试源码
process-test-sources 处理测试源码,比如过滤一些值
generate-test-resources 生成测试需要的资源文件
process-test-resources 复制并处理测试资源文件至测试目标目录
test-compile 编译测试源码至测试目标目录
test 使用合适的单元测试框架运行测试。这些测试应该不需要代码被打包或发布
prepare-package 在真正的打包之前,执行一些准备打包必要的操作。这通常会产生一个包的展开的处理过的版本
package 将编译好的代码打包成可分发的格式,如 JAR,WAR,或者EAR
pre-integration-test 执行一些在集成测试运行之前需要的动作。如建立集成测试需要的环境
integration-test 如果有必要的话,处理包并发布至集成测试可以 运行的环境
post-integration-test 执行一些在集成测试运行之后需要的动作。如清理集成测试环境。
verify 执行所有检查,验证包是有效的,符合质量规范
install 安装包至本地仓库,以备本地的其它项目作为依赖使用
deploy 复制最终的包至远程仓库,共享给其它开发人员和项目(通常和一次正式的发布相关)

4、Maven仓库(Repositories)
在不用Maven的时候,比如说以前我们用Ant构建项目,在项目目录下,往往会看到一个名为/lib的子目录,那里存放着各类第三方依赖jar文件,如log4j.jar,junit.jar等等。每建立一个项目,你都需要建立这样的一个/lib目录,然后复制一对jar文件,这是很明显的重复。重复永远是噩梦的起点,多个项目不共用相同的jar文件,不仅会造成磁盘资源的浪费,也使得版本的一致性管理变得困难。此外,如果你使用版本管理工具(如SVN),你需要将大量的jar文件提交到代码库里,可是版本管理工具在处理二进制文件方面并不出色。
Maven仓库就是放置所有JAR文件(WAR,ZIP,POM等等)的地方,所有Maven项目可以从同一个Maven仓库中获取自己所需要的依赖JAR,这节省了磁盘资源。此外,由于Maven仓库中所有的JAR都有其自己的坐标,该坐标告诉Maven它的组ID,构件ID,版本,打包方式等等,因此Maven项目可以方便的进行依赖版本管理。你也不在需要提交JAR文件到SCM仓库中,你可以建立一个组织层次的Maven仓库,供所有成员使用。另外Maven有专门的仓库管理器(Nexus)来进行构建的管理。
五、小结
   Maven有着许多实用的特点,并且完成任务十分出色。Maven中最值得称赞的地方就是使用了标准的目录结构和部署。这就使得开发人员能够适应不同的项目,并且不用学习任何结构方面新的东西,也不用掌握特殊的指令来构建结构。在文档方面,由于使用了项目站点构建工具,所以当项目构建完成后,您可以查看所有开发的当前状态,“约定优于配置”在Maven中得到了很好的体现。
Maven官方:http://maven.apache.org/
参考资源:http://www.juvenxu.com/

 

  • 大小: 50.4 KB
  • 大小: 28.8 KB
分享到:
评论

相关推荐

    maven 环境搭建总结

    maven 环境搭建总结 maven心得

    maven使用小结

    maven简介;从SVN上检出maven项目,并导入到本地;配置本地项目的关联关系

    Maven实战(高清版)

    xml2.7.3 不要使用ide内嵌的maven2.8 小结第3章 maven使用入门3.1 编写pom3.2 编写主代码3.3 编写测试代码3.4 打包和运行3.5 使用archetype生成项目骨架3.6 m2eclipse简单使用3.6.1 导入maven项目3.6.2 ...

    Maven实战 安装配置

    第3章 Maven使用入门16.3.1 编写POM17.3.2 编写主代码18.3.3 编写测试代码19.3.4 打包和运行20.3.5 使用Archetype生成项目骨架21.3.6 m2eclipse简单使用22.3.7 NetBeans Maven插件简单使用23.3.8 小结

    Maven实战- 入门

    2.8 小结 15. 第 3 章 Maven 使用入门 16. 3.1 编写 POM 17. 3.2 编写主代码 18. 3.3 编写测试代码 19. 3.4 打包和运行 20. 3.5 使用 Archetype 生成项目骨架 21. 3.6 m2eclipse 简单使用 22. 3.7 NetBeans Maven ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    小结 4. 定制一个Maven项目 4.1. 介绍 4.1.1. 下载本章样例 4.2. 定义Simple Weather项目 4.2.1. Yahoo! Weather RSS 4.3. 创建Simple Weather项目 4.4. 定制项目信息 4.5. 添加新的依赖 4.6. ...

    Maven权威指南中文版(完整)

    3.6. 小结 ..................................................... 38 4. 定制一个Maven项目 .............................................. 39 4.1. 介绍 .......................................................

    Maven配置项目依赖使用本地仓库的方法汇总(小结)

    主要介绍了Maven配置项目依赖使用本地仓库的方法汇总(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    几个好用Maven镜像仓库地址(小结)

    主要介绍了几个好用Maven镜像仓库地址(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Maven引入外部jar的几种方法(小结)

    主要介绍了Maven引入外部jar的几种方法(小结),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    IDEA中Maven依赖下载失败解决方案(小结)

    主要介绍了IDEA中Maven依赖下载失败解决方案(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    Maven打jar包的三种方式(小结)

    主要介绍了Maven打jar包的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    ES6.6.2 使用小结 源码

    包含“ES6.6.2 使用小结 ”文章的所有源码,其中是Java操作ES的一些基本测试,欢迎各位可以下载。

    2022年计算机SSM高校学生社团管理系统的设计与实现.rar(毕业设计论文+程序源码+数据库)

    本章小结 12 3 学生社团管理系统总体架构与概要设计 13 系统整体结构 13 模块设计 14 实体设计 15 运行与开发环境 16 本章小结 17 4 学生社团管理系统功能详细设计 18 基础申请 18 社团事务管理 19 社团财务...

    毕业设计:基于SpringBoot响应式企业员工绩效考评系统的设计与实现(源码 + 数据库 + 说明文档)

    2.5 小结 4 3 需求分析 6 3.1 业务背景 6 3.2 业务角色分析 6 3.2.1 普通员工功能 6 3.2.2 主管功能 6 3.2.3 系统管理员功能 6 3.2.4 评分标准功能 7 3.2.5 PC端与手机端 7 3.2.6 制图 7 3.3 用例分析 7 3.4 用例...

    JBPM4工作流应用开始指南.rar

    195 第9章 jBPM4扩展研发先决条件 196 9.1 深入应用jBPM4所需要知道的 196 9.1.1 如果您的业务基于复杂的规则,在jBPM中加入Drools吧 196 9.1.2 抉择,是否使用BPEL 197 9.2 Maven仓库和Java依赖库 199 9.3 小结 200...

    Spring in Action(第2版)中文版

    目录 第一部分spring的核心 第1章开始spring之旅 1.1spring是什么 1.2开始spring之旅 1.3理解依赖注入 ...1.5小结 ...2.6小结 ...3.7小结 ...4.6小结 ...5.8小结 ...6.5小结 ...7.7小结 ...8.6小结 ...9.6小结 ...b.4小结

    Spring in Action(第二版 中文高清版).part2

    第一部分 Spring的核心 第1章 开始Spring之旅 1.1 Spring是什么 1.2 开始Spring之旅 1.3 理解依赖注入 1.3.1 依赖注入 1.3.2 DI应用 1.3.3 企业级应用中的依赖注入 1.4 应用AOP ...B.4 小结

Global site tag (gtag.js) - Google Analytics