关于maven的问题
1. 什么是maven
是apache下的一个开源项目,并且只是用来管理java项目的。Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
2.什么是依赖管理
依赖管理就是将项目所依赖的jar包按照一定规则进行规范化管理。
3. 什么是项目构建
项目构建是一个项目从编写源代码到编译,测试,运行,打包,部署,运行的过程。
3.1 传统项目构建过程
(1) 在eclipse中新建一个WEB工程。
(2) 进行编码及编写配置文件
(3) 对源代码进行编译运行,生成class文件
(4) 打成war包,部署至tomcat
4.使用Maven好处
一步构建:一个命令即可启动。
依赖管理:对jar包统一管理,避免冲突等问题
跨平台:可在windows及linux下运行
有利于提高大型项目的团队开发效率
越来越多的公司使用maven
5.maven的常用命令
Mvn clean : 清理
Mvn compile:编译
Mvn package:打包
mvn test : 测试,⾃动运⾏所有的测试⽤例
mvn install : 安装,将项⽬打的包安装到本地仓库,其他项⽬就可以依赖了
Mvn jetty:run : 运⾏jetty插件
6.Maven的坐标和依赖
所有的maven项⽬都有⼀个唯⼀的坐标作为标识,肯定是不能重复的,其他项⽬通过坐标进⾏依赖的 导⼊
- maven的坐标组成部分
groupId: 组织机构id,org.aptech.hdax, org.springframework
artifactId: ⼦项⽬编号,springmvc, spring-test, spring-core
version: 版本号,可以⼀直迭代,平时项⽬开发⽤的是快照版本 0.0.1-SNAPSHOT
Package: jar war pom - 项⽬依赖的核⼼概念:
框架整合最害怕jar包冲突,之前不使⽤maven,经常出现这个⽂件。
依赖范围 scope标签进⾏配置
Compile: 默认值,项⽬打包的时候会把该依赖包打进去
Test : 测试依赖,只是在运⾏测试⽤例的时候会⽤到,打包是不打进去的
Provided: 提供依赖,类似于test
传递依赖
a -> b, b->c ,如果在a中导⼊到b的依赖,c会⾃动过来
依赖调解
如果不同的包传递依赖了⼀个相同的jar,但是版本不⼀致
原则:
最短路径
第⼀声明优先原则
排除依赖
归类依赖: ⽅便后期的依赖版本升级、降级
7. Maven的⽣命周期
可能会想起: servlet的⽣命周期:实例化、初始化、服务、销毁
mvn clean package
三套独⽴的⽣命周期,每个⽣命周期对应不同的阶段phase
ü Clean Lifecycle 在进⾏真正的构建之前进⾏⼀些清理⼯作。
ü Default Lifecycle 构建的核⼼部分,编译,测试,打包,部署等等。
ü Site Lifecycle ⽣成项⽬报告,站点,发布站点。
每套⽣命周期都由⼀组阶段(Phase)组成,我们平时在命令⾏输⼊的命令总会对应于⼀个特定的阶段
8. Maven的仓库
所有的项⽬都有坐标,唯⼀的标识,这个标识同样也是maven仓库的存储路径。
对于Maven来说,仓库只分为两类:本地仓库 和 远程仓库。
项⽬依赖,先查找本地仓库,如果没有,查找远程仓库,下载到本地仓库,然后项⽬依赖使⽤。
- 本地仓库:
默认保存到⽤户⽬录的.m2中
也可以通过修改配置⽂件改到其他地⽅(本地仓库的配置在settings.xml文件中修改。) - 远程仓库
中央仓库:maven中央仓库、阿⾥云镜像库(默认只会从这⾥下载)
私服:局域⽹使⽤,安全、速度快、可以上传⾃⼰的私有东⻄
第三⽅的公共库:Jboss、java.net(⽹络相关的类库) - 如何配置私服和第三⽅的公共库
全局配置:直接修改maven的配置⽂件
局部配置:修改项⽬的配置⽂件即可
.9聚合和继承
- 聚合:⼀键式构建所有项⽬
- 继承:配置⽂件重复的问题:项⽬依赖、插件
10. maven中Pom.xml解析
setting.xml主要用于配置maven的运行环境等一系列通用的属性,是全局级别的配置文件;而pom.xml主要描述了项目的maven坐标,依赖关系,开发者需要遵循的规则,缺陷管理系统,组织和licenses,以及其他所有的项目相关因素,是项目级别的配置文件。