1.1 maven是什么
-
maven的本质一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(Project Object Model — POM)
-
-
中间蓝色区域时maven包括的
-
maven提供一系列插件实现对应导出功能
-
1.2 maven的作用
-
项目构建:提供标准化、跨平台的自动化项目构建方式(一条命令自动构建项目)
-
依赖管理:统一管理项目依赖的资源,避免不同资源的版本冲突等。
2. Maven基础概念
2.1 仓库
用于存储资源,包含各种jar包
-
远程仓库
-
中央仓库:所有Maven用户公有,包括99%的jar包资源
-
私服仓库:连通本地和中央仓库,向中央仓库请求资源
-
加快访问速度,类似于缓存
-
一定范围内的共享资源,自主研发版权
-
-
-
本地仓库
-
本地仓库:当前用户电脑上的私有仓库,向私服仓库请求资源
-
2.2 坐标
-
概念:
-
描述仓库中资源的位置
-
-
组成
-
groupid:定义当前Maven项目隶属组织名称
-
artifactid:定义当前Maven项目名称
-
version:项目版本号
-
-
作用
-
唯一标识,唯一性定位资源位置
-
将资源的识别和下载工作交由机器完成
-
Maven工具根据给定坐标自动完成资源下载
-
-
3. Maven 仓库配置
3.1 配置本地仓库
获取得到的资源存放的本地位置
<localRepository> D:\download\apache-maven-repository </localRepository>
3.2 配置镜像仓库
<!-- 配置具体仓库的下载镜像 --> <mirror> <id>nexus-aliyun</id> <!-- 替代的仓库为中央仓库 --> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>
4. Maven项目
4.1 Maven项目工程结构
4.1.1 基本结构
-
注意Src目录同级还有一个 pom.xml文件,代表项目对象模型,以其为基础进行Maven执行
-
左边的是jave项目,右边的是javaWeb项目,有比那比左边多一个webapp目录
4.1.2 pom.xml
4.2 Maven项目构建命令
target文件夹内的内容如图所示
在项目根目录下,使用控制台执行如下命令,可以实现想要功能即Maven的职责——项目构建和依赖管理,这些功能的实现也是基于pom.xml的配置来进行的,
-
mvn compile
-
编译:只编译项目目录下的src文件包,编译后的文件存放在target中的classes中
-
-
mvn clean
-
清理:清理编译后的文件
-
-
mvn test
-
测试:编译目录下的测试test文件包,存放在target中的test文件夹中并执行,生成测试报告
-
-
mvn package
-
打包:将项目文件打包成jar文件(基于pom.xml文件配置),存放在target文件夹中
-
-
mvn install
-
安装到本地仓库:将打包后的文件安装到本地仓库
-
4.3 Maven插件自动构建项目
在项目目录文件下打开控制台输入如下指令即可,项目目录最好是一个空目录
4.3.1 创建java工程
mvn archetype:generate -DgroupId=com.itheima -DartifactId=java-project -DarchetypeArtifactId=maven-archetype-quickstart -Dversion=0.0.1-snapshot -DinteractiveMode=false
4.3.2 创建web工程
mvn archetype:generate -DgroupId=com.itheima -DartifactId=web-project -DarchetypeArtifactId=maven-archetype-webapp -Dversion=0.0.1-snapshot -DinteractiveMode=false
4.4 使用IDEA构建Maven模块
-
新建项目
-
项目中新建模块
-
勾选Maven,制定jdk版本,点击next
这边可以使用下面的模板,比如quickStart的模板就是上面的java工程目录结构,webapp就是web工程的目录结构
-
制定模块名,模块坐标(groupId,artifactId,Version),点击finish
-
完成模块创建
4.4.1 Maven插件使用
-
Lifecycle:生命周期,可以在这里执行对应命令
-
plugin:插件,当前Maven所持有的插件
-
dependencies:Maven管理的依赖关系,编译后或直接修改pom.xml文件可以更新
4.5 IDEA运行Maven的web项目
-
使用webapp模板创建maven项目:web01
-
在web01下的pom文件中导入tomcat插件
tomcat相当于web项目的服务器,能够解析web代码并渲染呈现
-
在idea的maven插件找到web01项目,启动其插件中的tomcat:run即可
-
也可以进行配置,在此快速启动
-
5.依赖管理
5.1 依赖配置
dependencies,dependency, 具体坐标版本号及配置等
5.2 依赖传递
-
依赖具有传递性
-
直接依赖:在当前项目中通过依赖配置建立的依赖关系
-
间接依赖:被依赖的资源如果依赖其他资源,则当前项目依赖其他资源,并且可以使用其他资源
-
5.2.1 依赖传递冲突问题
-
路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级浅,优先级越高
-
比如2度和3度中使用相同资源不同的版本,则当前项目参考2度的版本
-
-
声明优先:当资源在相同层级被依赖时,配置顺序考前的覆盖配置顺序后的
-
比如相同资源比如junit在上下的2度都有且版本不同,则在1度项目中,越早声明的版本越优先
-
-
特殊优先:当一个项目中配置了同个资源不同版本的,则晚声明的优先
5.3 可选依赖 不给别人看
可选依赖指对外隐藏当前模块所依赖的资源——不透明;依赖当前模块的项目,无法通过依赖的传递性,来依赖当前模块所依赖的资源。
具体操作:在依赖配置的时候设置optional为true
5.4 排除依赖 自己主动不看
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要 即我只需要我依赖的模块A,而不需要A依赖的其他资源
具体操作:在依赖配置的时候设置exclusions,exclusion,具体的资源(不写版本)
5.5 依赖范围
依赖的jar默认在任何地方可以使用,可以通过scope标签设定其作用范围
作用范围
-
主程序范围有效(main文件夹范围内)
-
测试程序范围有效(test文件夹范围内)
-
是否参与打包(是不是会和主代码一起打包,package指令范围内)
scope取值及实例:
设置scope后会显示在依赖界面中
5.5.1 依赖范围的传递性
带有依赖范围的资源在进行传递时,作用范围将受到影响;
了解即可,实际开发能用就行
6. 生命周期与插件
6.1 项目构建生命周期
-
Maven构建生命周期描述的时一次构建过程中经历了多少个事件
-
Maven对项目构建的生命周期划分为3套(像上面一样的阶段有三种)
-
clean:清理工作
-
default:核心工作,例如编译,测试,打包,部署等
-
site:产生报告,发布站点
-
6.1.1 生命周期示例 — default
-
生命周期控制的是在进行构建任务的时候执行的过程有哪些,每个过程具体完成什么任务
-
需要完成特定任务时,其前置所有任务都得完成
-
生命周期的执行由插件完成
6.2 插件
-
插件与生命周期内的阶段绑定,在执行到对应生命周期时执行对应的插件功能
-
默认maven在各个生命周期的各个阶段上有预设的绑定的插件,以实现各自的目标
-
我们可以通过自定义插件来在项目构建的生命周期过程种自定义功能,例如
注意每个插件有不同的语法,使用不同插件需要查对应文档