Maven介绍
1.我们为什么要使用Maven?
我们在项目的开发中会遇到一些问题,比如
- 都是同样的代码,为什么在我的机器上可以编译执行,而在他的机器上就不行了?
- 为什么在我的机器上可以正常打包,而配置管理员却打包不出来?
- 项目组加入了新的人员,我要给他说明编译环境设置,但是让我挠头的是,有些细节我也记得不是很清楚了!
- 我的项目依赖一些jar包,我应该把他们放在哪里?放源码库里?
正是因为这些问题,我们就需要使用Maven来帮助我们解决!
2.那什么是Maven?
Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建(管理),依赖管理(jar)和项目信息管理。
Maven主要有两个功能:
- 项目构建(创建,打包(jar(java项目),war(web项目)),部署)
- 依赖管理(做好配置,自定下载依赖)
3.Maven的工程结构
Project
|-src
| |-main
| | |-java —— 存放项目的.java文件
| | |-resources —— 存放项目资源文件,如spring, hibernate配置文件
| | |-webapp ———存放jsp,html,web.xml等网页文件 WebContent/WebRoot
| |-test 测试代码
| | |-java ——存放所有测试.java文件,如JUnit测试类
| | |-resources —— 测试资源文件
|-target —— 目标文件输出位置例如.jar、.war文件,该文件夹是自动创建的
|-pom.xml ——maven项目核心配置文件,依赖管理,插件管理
3.Maven的核心
- 坐标
在平面几何中坐标(x,y)可以标识平面中唯一的一点。在maven中坐标就是为了定位一个唯一确定的jar包。Maven世界拥有大量构建,我们需要找一个用来唯一标识一个构建的统一规范拥有了统一规范,就可以把查找工作交给机器
<!--依赖管理-->
<dependency>
<!--junit-->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
- 坐标主要组成
groupId:定义当前Maven组织名称,与包的命名方式类似,如:com.itqf
artifactId:定义实际项目名称
version:定义当前项目的当前版本 唯一的表示一个项目
- 依赖范围
其中依赖范围scope 用来控制依赖和编译,测试,运行的classpath的关系. 主要的是三种依赖关系如下:
- compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
- test:测试依赖范围。只对于测试classpath有效
- provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
- runtime:运行时提供。例如:jdbc驱动 <scope>runtime</scope>
- 生命周期
Maven生命周期就是为了对所有的构建过程进行抽象和统一。包括项目清理、初始化、编译、打包、测试、部署等几乎所有构建步骤。生命周期可以理解为构建工程的步骤。在Maven中有三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”,这三套生命周期分别是:
- Clean Lifecycle: 在进行真正的构建之前进行一些清理工作。
- Default Lifecycle: 构建的核心部分,编译,测试,打包,部署等等。
- Site Lifecycle: 生成项目报告,站点,发布站点。 ProjectManager
再次强调一下它们是相互独立的,你可以仅仅调用clean来清理工作目录,仅仅调用site来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。
- Maven三大生命周期
同上面的三套生命周期,1.clean:清理项目 2.default:构建项目 3.site:生成项目站点