一:Maven概述

Maven 是一个项目管理工具,它包含了一个 项目对象模型 (POM:Project Object Model)

1.Maven解决问题

(1)能帮你构建工程,管理 jar包,不用再每个工程都导入jar包

(2)编译代码

(3)还能帮你自动运行单元测试

(4)打包,生成报表,生成war文件部署到服务器

(5)甚至能帮你部署项目,生成 Web 站点

2.Maven的依赖管理

当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。

Maven工程中不需要直接导入jar包,而是通过pom.xml(配置文件)中添加jar包的坐标即可。

在需要用到 jar 包的时候,只要查找 pom.xml 文件,再通过 pom.xml 文件中的坐标,到一个专门用于”存放 jar 包的仓库”(maven 仓库)中根据坐标从而找到这些 jar 包,再把这些 jar 包拿去运行。

二:Maven仓库

Maven仓库的分类


(1)本地仓库 :用来存储从远程仓库或中央仓库下载的插件和 jar 包,项目使用一些插件或 jar 包,优先从本地仓库查找默认本地仓库位置在 ${user.dir}/.m2/repository,${user.dir}表示windows 用户目录。

注:在Maven目录的settings.xml中配置本地仓库路径

settings.xml配置文件
(2)远程仓库:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。远程仓库可以在互联网内也可以在局域网内。

(3)中央仓库 :在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。

三:Maven工程结构


src/main/java —— 存放项目的.java 文件

src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件

src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类

src/test/resources —— 测试资源文件

**target —— 项目输出位置,编译后的class 文件会输出到此目录
pom.xml——maven 项目核心配置文件

四:Maven 的概念模型

1:项目对象模型

(Project Object Model)一个 maven 工程都有一个 pom.xml 文件,通过 pom.xml 文件定义项目的坐标、项目依赖、项目信息、插件目标等。

2:依赖管理系统

(Dependency Management System)通过 maven 的依赖管理对项目所依赖的 jar 包进行统一管理。

依赖管理系统
provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被 tomcat 容器提供。

runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc

的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。

test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,

比如:junit。由于运行时不需要所以test范围依赖不会被打包。

测试总结:

 默认引入 的 jar 包 ——- compile 【默认范围 可以不写】(编译、测试、运行 都有效 )

 servlet-api 、jsp-api ——- provided (编译、测试 有效, 运行时无效 防止和 tomcat 下 jar 冲突)

 jdbc 驱动 jar 包 —- runtime (测试、运行 有效 )

 junit —– test (测试有效)

项目中添加的坐标
设置jdk编译版本和tomcat编译版本(设置成固定写法setting中)

pom.xml中配置
此时点击 idea最右侧 Maven Projects,就可以看到我们新添加的tomcat7 插件双击 tomcat7插件下tomcat7:run 命令直接运行项目,端口号是8888

3:项目生命周期(lifecycle)


使用 maven 完成项目的构建,项目构建包括:清理、编译、测试、部署等过程,maven 将这些过程规范为一个生命周期,生命周期的各各阶段:

Clean Lifecycle 在进行真正的构建之前进行一些清理工作。

Default Lifecycle 构建的核心部分,编译,测试,打包,部署等等。

Site Lifecycle 生成项目报告,站点,发布站点。

compile:编译

clean:清理

test:测试

package:打包

install:安装