1.maven是什么:(概述)
Apache Maven是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。Maven可以被用在Java开发,或任何其他的编程语言的任何项目,让开发人员的工作更轻松。概括地说,Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。 Maven增加可重用性并负责建立相关的任务。
最初设计Maven是为了简化Jakarta Turbine项目的建设。当时存在好几个项目,每个项目包含了不同的Ant构建文件、 JAR检查到CVS。为了促进这几个项目之间的交流合作,以及更方便地同时管理这若干个项目,Apache组织开发了Maven。使用Maven可以同时建立多个项目,发布项目信息,项目部署,在几个项目中传递JAR文件从而促进团队合作和帮助。
maven的工作原理是POM(Project Object Model)。POM将每一个工程看做一个可管理的对象,POM中管理该project的所有东西,包括该project的创建人信息、项目的 licenses、项目代码的存放位置信息( URL of where the project lives)、该项目的所有三方依赖(dependencies)、配置文件等等,一个POM包含一个项目的所有必须的信息,你只需要查看该project的POM就可以知道所有你想知道的该项目的相关信息。当然,POM的实现机制实际上是一个XML配置文件,pom.xml。
2.maven的具体功能包括:(maven功能详述)
2.1简化和标准化软件项目建设过程,从而使得编译,分配,文档,团队协作和其他任务能够无缝连接
-
-
- 使用maven管理的项目有标准的目录结构,使得不同project有相同或相近的目录结构,这样程序会更易读
- maven生命周期(the default/clean/site lifecycle)以及组成这些lifecycle的各个阶段(phase)都是maven定义好的,执行mvn <phase>就会顺序执行具体lifecycle的若干个phase。这个过程也可以看做是maven标准化了project的compile、package、install等操作过程,使得整个project的build过程的各个阶段得到无缝连接。
-
2.2 Aphache maven 是一种创新的软件项目管理工具,提供了一个项目对象模型(POM)文件的新概念来管理项目的构建,相关性和文档。
2.3maven 最强大的功能就是能够自动下载项目依赖库。
-
-
- 这样一来有三大好处:
- 第一,开发过程中不用到相关网站手动下载软件开发包然后copy所依赖的jar包到相应的工程中,只需要配置一下pom.xml就可以了,之后maven会根据你的pom.xml自动查找下载你的项目所依赖的jar包;
- 第二,当项目所依赖的jar包有更新时,你也可以不用管,maven会自动帮你下载更新相应的jar包到本地maven仓库。当然,这也是需要在pom.xml中实现配置好,maven才会帮你自动更新项目所依赖的jar包。
- 第三,Dependencies can be direct (e.g. my application depends on Spring at runtime), or indirect (e.g. my application depends on
commons-dbcp
which depends oncommons-pool
). The indirect dependencies are also known as "transitive" and it is those dependencies that are hardest to identify and manage.也就是说:有些依赖是直接依赖,你的项目依赖一个jar包,你将该jar包直接导入进来就可以了。但是有些时候,你的项目所依赖的jar包又依赖于其他jar包,这种时候管理三方jar包以及三方jar包所依赖的其他jar包就会变得非常复杂,然而借助于maven这个软件项目管理工具,就可以避免上述麻烦。 - 更多详细信息可以参见如下链接Maven依赖机制
- 这样一来有三大好处:
-
3.如何使用maven:(maven关键知识点)
概述:要想使用maven这个软件工程管理工具,就必须先要了解maven的相关技术知识点,只有把这些知识点都理解清楚了,才能将maven这个工具的作用发挥到极致。
3.1Maven项目的结构和内容在一个XML文件中声明,pom.xml 项目对象模型(POM),这是整个Maven系统的基本单元。pom.xml中定义了项目的构建、相关性和文档。更多详细信息,请参阅Maven POM的部分。
3.2 要想使用Maven去管理你的软件项目,首先要在你的计算机中搭建maven环境,具体如何搭建与配置maven,请参见Windows系统下安装配置apache
3.3 了解并熟记maven相关术语
-
-
- Maven本地资源库(存在于本地计算机中)
Maven 的本地资源库是用来存储项目的依赖库,默认的文件夹是 “.m2” 目录,可能需要将其更改为另一个文件夹。此处的链接有将maven本地资源库的默认路径改为自定义路径的方法。
- Maven本地资源库(存在于本地计算机中)
-
-
-
-
- Maven中央存储库以及其他远程库(存在于Internet远端服务器中)
-
- 概述:Maven 中央存储库是 Maven 用来下载所有项目的依赖库的默认位置。当maven本地仓库中没有你的项目所依赖的某个jar包时,maven会自动从maven中央存储库下载相关jar包到你的maven本地资源库中,也就是说maven会在联网的情况下自动从maven中央存储库(Internet远端服务器)下载开发者的项目所依赖的jar包到开发者的 本地计算机 中。默认情况下,Maven从Maven中央仓库下载所有依赖关系。但是,有些库并不存在于在中央存储库,只有在Java.net或JBoss的储存库远程仓库中能找到。关于maven默认中央存储库和自定义其他远程仓库的区别与联系,详情参见如下链接:
- 默认中央存储库Maven的默认中央存储库
- 自定义添加其他远程库如何添加远程库?
-
- 如何从Maven远程存储库下载?
-
- 触发机制:当项目中有新的依赖产生时(包括jar包依赖等),或者远程仓库(包括中央仓库和其他远程库)中项目所依赖的某些jar包版本有更新时,都会自动触发maven本地仓库的更新动作
- maven本地仓库的更新过程如下
使用maven管理的软件项目工程,也即maven project,有新的依赖(包括jar包依赖等)产生时,maven会先查找计算机本地的mavenLocalRepository目录下是否已经存在相关jar包,若不存在,maven会自动从默认的远程库(也即默认maven中央仓库)中查找并下载相关jar包,若是默认中央仓库也没有查找到工程所依赖的jar包,maven会继续从pom.xml中由开发者自定义添加的其他远程仓库去下载项目所依赖的jar包,若本地仓库---->默认中央仓库---->自定义其他远程仓库都没有查找到项目所依赖的jar包,maven将会报错。 - 实例:一个使用maven管理的软件项目,参见如下链接Maven依赖机制
-
- 定制库到Maven本地资源库
很多库仍然不支持 Maven 的 pom.xml 的概念,这里有一个指南来说明如何包括“非Maven支持”库到 Maven 本地资源库中。
- Maven中央存储库以及其他远程库(存在于Internet远端服务器中)
-
-
4.实际操作:我的第一个使用maven管理的java web软件项目
step1,在你的计算机中安装配置Apache maven,具体操作步骤参见Windows系统下安装配置apache maven
step2,修改maven本地资源库的存储路径,(由默认路径改为自定义路径),参见链接:Maven本地资源库
step3,了解maven能帮你做什么。如maven可以为你的工程管理工程所依赖的jar包(包括自动下载、自动更新项目所依赖的三方jar包,这样项目依赖的jar包有更新时你就不用每次都自己下载相关jar包、copy相关jar包到项目目录,而是把这些工作都托付给maven来帮你做。但是maven如何知道它应该为你的项目管理哪些jar包呢?答:通过你定义的pom.xml文件知道。)Maven依赖机制
step4,建立你的软件工程(如java工程、java web工程等),并且为你的软件工程引入maven这个管理工具。为项目添加pom.xml就是为项目引入了maven管理工具。然后你就可以通过编写pom.xml来告诉maven如何帮助你管理你的项目。
step5,使用maven管理你的项目,具体有很多用法,可以参见本文第五部分内容
5.maven进阶---使用过程中遇到的一些问题在这一部分进行总结(若干实例)
实例一、更改maven的本地资源库的存储路径(由默认路径改为自定义路径),参见链接:Maven本地资源库
实例二、使自己的软件工程能够自动添加项目所依赖的jar包并且自动更新,参见如下链接Maven依赖机制
这里面包含三种情况,
状况一:当项目所依赖的jar包存在于maven默认中央仓库中时,如何配置pom.xml Maven中央存储库
状况二:当项目所依赖的jar包不存在于默认maven中央仓库时,如何配置pom.xml其他远程仓库 如何添加远程库?
状况三:如何使不支持maven的pom.xml的jar文件被包含到maven的local repository 定制库到Maven本地资源库
参考资料:
【1】http://www.yiibai.com/maven/
【2】maven官方网站