一、maven概念
1.maven是什么?
- 项目管理工具,管理jar,有一个仓库
2.maven有什么用?
* 统一管理项目所用到的依赖包
* 自动解决第三方组件和maven共同用到jar冲突重复问题 ( 例如 tomcat里自带 jsp,servlet 包 )
* 方便第三方插件的及集成 (不知
* 实现不同项目的兼容性管理 (不知
二 、 maven目录
1.目录结构
- 项目下目录第一层目录结构

- src下的目录结构

src/main/java —— 存放项目的.java 文件
src/main/resources —— 存放项目资源文件,如 spring, hibernate 配置文件
src/test/java —— 存放所有单元测试.java 文件,如 JUnit 测试类
src/test/resources —— 测试资源文件
target —— 项目输出位置,编译后的class 文件会输出到此目录
pom.xml——maven 项目核心配置文件
注意:如果是普通的 java 项目,那么就没有webapp 目录
三 、 maven的Archetype原型
1.Archetype是什么?
archetype的意思是 骨架,他有多种模板,适应各种项目类型开发 (这是前人实践过的,用起来开发会很高效,这在idea创建 maven最后一步会选择骨架
2.常用的Archetype骨架
1,maven-archetype-quickstart
* 一个包含junit依赖声明的pom.xml
* src/main/java主代码目录及一个名为App的类
* src/test/java测试代码目录及一个名为AppTest的测试用例
2,maven-archetype-webapp (最简单的模板,当需要快速创建一个Web应用的时候可以使用它。
* 一个packaging为war且带有junit依赖声明的pom.xml
* src/main/webapp/目录
* src/main/webapp/index.jsp文件
* src/main/webapp/WEB-INF/web.xml文件
四 、 maven工作原理
1.maven项目如何找到依赖包呢?
- 方式:通过pom.xml里手动配置坐标找到依赖包
<groupId>javax.servlet</groupId> //组织的名。一般是网址倒过来写
<artifactId>javax.servlet-api</artifactId> //jar名字
<version>3.1.0</version> //版本号
<scope>provided</scope>
2.maven项目如何控制?
1. 方式:通过pom.xml内的标签设置
<modelVersion>4.0.0</modelVersion> //object model版本 一般只能是4.0.0
<packaging>war</packaging> //打包方式jar ,war
<name>maven_h</name> // 项目的名称
<groupId>com.okjiaoliu</groupId> //组织的名。一般是网址倒过来写
<artifactId>maven_h</artifactId> //定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目
<version>1.0-SNAPSHOT</version> //当前项目的版本,SNAPSHOT,表示是快照版本,在开发中release为正式发行版
3.maven两大优点
1.依赖管理
坐标,不处理的结果:
1.工程变大
2.jar重复,maven项目运行,出冲突
2.项目一键构建
* 构建流程: 清理 , 编译 , 测试 , 报告 , 打包 , 部署
maven常见问题
1.maven项目坐标不知道怎么办?
1.方式:从互联网搜索
*https://search.maven.org/
*http://mvnrepository.com/
2.maven项目中jar的依赖范围scope?
1.什么是依赖范围?
* maven项目在构建的几个步骤中使用jar包,通俗讲就是告诉maven什么时候使用该jar包
2.分别有哪些依赖范围?
1. complie 默认的 ,编译,测试,运行 有效
2. test 只在 测试 的时候有效
3. runtime 只对 测试,运行 的时候有效
4. system 使用system访问时,不是maven解析,必须通过systemPath元素指定依赖文件路径,
5.provide : 代表的是容器或则插件已经提供了,如:servlet-api 、jsp-api这些包(编译、测试 有效, 运行时无效, 防止和 tomcat 下 jar 冲突tomcat的servlet jsp包,如果默认complie编译器编译的时候包重复的错误)
5. import 将其他模块定义好的依赖导入进来(和c的inclue差不多
3.依赖由强到弱:compile>provided>runtime>test
2.maven项目在IDEA中遇到的坑
1.Maven首次创建初始化要好久我花了20分钟,这是正常现象。
初始化成功后,控制台弹出信息

2.Idea集成 maven 创建项目 初始化后出现的目录结构
刚刚初始化完成的目录结构是这样的,如果要servlet要用注解配置也不能删除web.xml,会无法访问servlet
*开始练习用maven管理项目做基于servlet和jsp的小项目,回顾之前学的知识