

一、Maven介绍
1.什么是Maven 2.Maven的功能 3.什么是构建 4.项目的构建方式
二、Maven的安装
1.下载 2.安装 3.配置 4.修改Maven中央仓库地址
三、创建Maven工程
1.Maven工程结构 2.创建工程 3.Maven命令的使用
四、Maven核心概念
1.Maven坐标的组成 2.依赖管理 3.生命周期 4.插件 5.继承项目 6.聚合项目
五、Maven仓库
1.什么是Maven仓库 2.仓库的分类
一、Maven介绍
1.什么是Maven
Maven是基于POM(工程对象模型),通过一小段描述来对项目的代码、报告、文件进行管理的工具。
Maven是一个跨平台的项目管理工具,它是使用java开发的,它要依赖于jdk1.6及以上。
2.Maven的功能
- 管理依赖(即jar包)
- 项目构建
3.什么是构建

一个项目的构建一般要经过以上六个步骤。
4.项目的构建方式
- Eclipse构建
使用eclipse进行项目构建,相对来说,步骤比较零散,不好操作。 - Ant构建
它是一个专门的项目构建工具,它可以通过一些配置来完成项目构建,这些配置要明确的告诉ant,源码包在哪?目标class文件应该存放在哪?资源文件应该在哪。 - Maven构建
它是一个项目管理工具,他也是一个项目构建工具,通过使用maven,可以对项目进行快速简单的构建,它不需要告诉maven很多信息,但是需要安装maven去的规范去进行代码的开发。也就是说maven是有约束的。
二、Maven的安装
1.下载
2.安装
- 第一步:配置maven的环境变量MAVEN_HOME
- 第二步:配置maven的环境变量PATH
- 第三步:测试maven是否安装成功,在系统命令行中执行命令:
mvn –v
3.配置
- 全局配置(默认)
在maven安装目录的conf里面有一个settings.xml文件,这个文件就是maven的全局配置文件。 - 用户配置
用户配置文件的地址:~/.m2/settings.xml(如C:/Users/admin.m2/settings.xml),该文件默认是没有,没有的话则使用全局配置文件的配置,需要将全局配置文件拷贝一份到该目录下,才能让用户配置生效。
用户配置文件里,使用
<localRepository>E:\repository</localRepository>为该用户指定本地仓库地址,若不指定默认为~/.m2/repository目录。
4.修改Maven中央仓库地址
在全局配置或用户配置的settings.xml文件内容加入如下代码即可:
<mirrors>
<!-- 阿里云仓库 -->
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>https://maven.aliyun.com/repository/central</url>
</mirror>
<!-- 中央仓库1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
</mirrors>
三、创建Maven工程
1.Maven工程结构
下面是两种常见的Maven工程结构:
Java工程

web工程

2.创建工程
使用命令行创建
- 创建Java工程
mvn archetype:generate -DgroupId=包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-quickstart
- 创建web工程
mvn archetype:generate -DgroupId=包名 -DartifactId=项目名称 -DarchetypeArtifactId=maven-archetype-webapp
使用Idea创建
File->New->Project->Maven->选择模板

3.Maven命令的使用
| 代码 | 命令 | 说明 |
|---|---|---|
| Maven compile | 编译命令 | 重新编译 |
| Maven clean | 清楚命令 | 清除已经编译好的class文件,具体说清除的是target目录中的文件 |
| Maven test | 测试命令 | 该命令会将test目录中的源码进行编译 |
| Maven package | 打包命令 | 重新打包 |
| Maven install | 安装命令 | 会将打好的包,安装到本地仓库 |
组合命令:以上命令可以进行组合使用,如:
mvn clean compile
mvn clean test
mvn clean package
mvn clean install
四、Maven核心概念
1.Maven坐标的组成
Maven坐标是为了定位一个唯一确定的jar包或者项目模块。
- groupId 定义当前Maven组织名称
- artifactId 定义实际项目名称
- version 定义当前项目的当前版本
例如:
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
2.依赖管理
依赖范围

其中依赖范围scope用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系。
- compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
- test:测试依赖范围。只对于测试classpath有效
- provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
- runtime:运行时提供。例如:jdbc驱动
如:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope><!-- 测试依赖范围 -->
</dependency>
依赖传递
假如有三个工程A、B、C,B依赖A,C依赖B,那么B是C的直接依赖,A是C的间接依赖。

依赖传递范围:

左边第一列表示第一直接依赖范围,
上面第一行表示第二直接依赖范围,
中间的交叉单元格表示传递性依赖范围。
总结:
- 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
- 当第二直接依赖的范围是test的时候,依赖不会得以传递。
- 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
- 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;
依赖冲突
在maven中存在两种冲突方式:
- 一种是跨pom文件的冲突
按照 就近原则。 - 一种是同一个pom文件中的冲突
下面依赖的覆盖上面的依赖。
可选依赖
<optional>true/false</optional>
Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。
排除依赖
Exclusions 标签可以排除依赖,格式如下:
<exclusions>
<exclusion>
<groupId></groupId>
<artifactId></artifactId>
</exclusion>
</exclusions>
3.生命周期
Maven有三个生命周期:
- clean生命周期
- default生命周期
- site生命周期
生命周期可以理解为项目构建的步骤集合。
生命周期是由多个阶段(Phase)组成。每个阶段都是一个完整的功能,比如mvn clean中的clean就是一个阶段。
clean生命周期
| 阶段 | 说明 |
|---|---|
| pre-clean | 执行一些需要在clean之前完成的工作 |
| clean | 移除所有上一次构建生成的文件 |
| post-clean | 执行一些需要在clean之后立刻完成的工作 |
| mvn clean命令 | 等同于mvn pre-clean clean |
只要执行后面的命令,前面的命令都会执行,不需要再新去输入命令。这极大地简化了程序猿的操作。
default生命周期(重点)
| 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 (常用) |
| pre-integration-test |
| integration-test |
| post-integration-test |
| verify |
| install 将包安装至本地仓库,以让其它项目依赖(常用) |
| deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享 |
site生命周期
| site生命周期 | 说明 |
|---|---|
| pre-site | 执行一些需要在生成站点文档之前完成的工作 |
| site | 生成项目的站点文档 |
| post-site | 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备 |
| site-deploy | 将生成的站点文档部署到特定的服务器上 |
4.插件
每个插件(plugin)都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是由插件来实现的。
下面介绍两种常用的插件:
编译插件
我们常用的配置JDK版本的方式是在POM.xml的properties标签里设置:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
其实也可以使用编译插件来配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
Tomcat插件
在命令行使用mvn tomcat:run命令可以使用tomcat插件来启动web工程,但默认版本为tomcat6。
我们一般在插件里进行如下配置:
<!-- Tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
这样可以使用tomcat7运行web工程,但命令要改为mvn tomcat7:run
5.继承项目
即父子项目,外层为父项目,里面又创建子项目。父项目的依赖可以被子项目继承。
6.聚合项目
外面一个大项目,里面分功能创建多个小项目,小项目之间可以是依赖的关系。聚合项目的优点是可以使代码各部分功能清晰划分,缺点使编写调试时重启太慢了。
五、Maven仓库
1.什么是Maven仓库
用来统一存储所有Maven共享构建的位置就是仓库。
根据Maven坐标定义每个构建在仓库中唯一存储路径大致为:
groupId/artifactId/version/artifactId-version.packaging。
2.仓库的分类
- 本地仓库
默认在~/.m2/repository,如果在用户配置中有配置,则以用户配置的地址为准。 - 远程仓库
部署在网上的其他人的仓库,比阿里的或者Maven官方自己的中央仓库。 - 私服
一般是部署在自己公司的服务器上,相当于将网上其他的中央仓库里的文件缓存在自己的服务器上,多人或者多次使用时可以极大的提高下载速度。
本文详细介绍了Maven的用途、安装步骤、工程结构、核心概念,包括依赖管理、生命周期、插件、仓库等内容,旨在帮助初学者理解并掌握Maven在JavaEE项目中的应用。

2993

被折叠的 条评论
为什么被折叠?



