什么是Maven?
Maven 是一个项目管理工具。它负责管理项目开发过程中的几乎所有的东西,最强大的功能就是能够自动下载项目依赖库。
Maven的生命周期
maven把项目的构建划分为不同的生命周期(lifecycle)。粗略一点的话,它这个过程(phase)包括:编译、测试、打包、集成测试、验证、部署。maven中所有的执行动作(goal)都需要指明自己在这个过程中的执行位置,然后maven执行的时候,就依照过程的发展依次调用这些goal进行各种处理。
这个也是maven的一个基本调度机制。一般来说,位置稍后的过程都会依赖于之前的过程。当然,maven同样提供了配置文件,可以依照用户要求,跳过某些阶段。
Maven的标准工程结构
Maven的标准工程结构如下:
|-- pom.xml(maven的核心配置文件)
|-- src
|-- main
| – java(java源代码目录)
| – resources(资源文件目录)
|-- test
– java(单元测试代码目录)
|-- target(输出目录,所有的输出物都存放在这个目录下)
--classes(编译后的class文件存放处)
Maven基本命令
- v:查询Maven版本
本命令用于检查maven是否安装成功。Maven安装完成之后,在命令行输入mvn -v,若出现maven信息,则说明安装成功。 - compile:编译
将java源文件编译成class文件 - test:测试项目
执行test目录下的测试用例 - package:打包
将项目打成jar包 - clean:删除target文件夹
- install:安装
将当前项目放到Maven的本地仓库中。供其他项目使用
什么是Maven仓库?
Maven仓库用来存放Maven管理的所有Jar包。分为:本地仓库 和 中央仓库。
本地仓库:Maven本地的Jar包仓库。
中央仓库: Maven官方提供的远程仓库。
当项目编译时,Maven首先从本地仓库中寻找项目所需的Jar包,若本地仓库没有,再到Maven的中央仓库下载所需Jar包。
Maven的版本规范
在Maven中,坐标是Jar包的唯一标识,Maven通过坐标在仓库中找到项目所需的Jar包。
- groupId:所需Jar包的项目名
- artifactId:所需Jar包的模块名
- version:所需Jar包的版本号
groudId
团体、组织的标识符。团体标识的约定是,它以创建这个项目的组织名称的逆向域名(reverse domain name)开头。一般对应着JAVA的包的结构。例如org.apache
artifactId
单独项目的唯一标识符。比如我们的tomcat, commons等。不要在artifactId中包含点号(.)。
version
一个项目的特定版本。
packaging
项目的类型,默认是jar,描述了项目打包后的输出。类型为jar的项目产生一个JAR文件,类型为war的项目产生一个web应用。
maven有自己的版本规范,一般是如下定义 ..- ,比如1.2.3-beta-01。要说明的是,maven自己判断版本的算法是major,minor,incremental部分用数字比较,qualifier部分用字符串比较,所以要小心 alpha-2和alpha-15的比较关系,最好用 alpha-02的格式。
maven在版本管理时候可以使用几个特殊的字符串 SNAPSHOT,LATEST,RELEASE。比如"1.0-SNAPSHOT"。各个部分的含义和处理逻辑如下说明:
SNAPSHOT
这个版本一般用于开发过程中,表示不稳定的版本。
LATEST
指某个特定构件的最新发布,这个发布可能是一个发布版,也可能是一个snapshot版,具体看哪个时间最后。
RELEASE
指最后一个发布版。
依赖范围scope
在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。
- compile :默认范围,用于编译
- provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
- runtime: 在执行时需要使用
- test: 用于test任务时使用
- system: 需要外在提供相应的元素。通过systemPath来取得
- systemPath: 仅用于范围为system。提供相应的路径
- optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用
聚合项目
什么是聚合?
将多个项目同时运行就称为聚合。
如何实现聚合?
创建Maven项目时选择打包为pom,后续子项目则选择module来创建即可。
什么是继承?
在聚合多个项目时,如果这些被聚合的项目中需要引入相同的Jar,那么可以将这些Jar写入父pom中,各个子项目继承该pom即可。
如何实现继承?
父pom配置:将需要继承的Jar包的坐标放入标签即可。
eclipse、idea中的使用
这两个软件都自带有maven,我们可以直接使用,另外我们也能下载最新的maven,然后配置我们自己的maven本地库。我们还可以在http://mvnrepository.com/站点搜寻你想要的jar包或者对应的pom文件的依赖格式。
如何在eclipse、idea中运行
1.配置tomcat,然后选择run as server。或者使用maven build命令,输入 tomcat:run命令来运行,但是需要插件配合。
2.打包后放入tomcat运行。
maven 打包以及更新版本
普通项目 clean package
聚合项目 父项目直接 clean package,跳过test
更新版本 使用versions:set -DnewVersion=x.x.x-SNATHOST