maven是Apache基金会管理的项目,开源的。
maven是自动化构建工具。
1)自动化---给出命令,maven可以根据给出的命令实现操作
2)构建---将项目所需要的原材料,生产加工成为可以被运行和使用的项目的过程(JDBC(JAR、DbUtils)、数据库、前端、连接池)
3)项目的原材料:静态和动态的两部分。静态:html、css、js、图片、音频、视频、flash动画、gif动图;动态:servlet、jsp、代码、配置文件(不能直接访问的、放在web-info、classpath类路径下)
1)自动化构建
2)实现jar包的管理
3)实现项目结构设计
1)下载位置
http://archive.apache.org/dist/ (apache基金会项目档案目录)
2021.4.4 maven 3.8.1
注意:jdk1.8 和 开发工具支持什么版本
2)安装
A、maven的条件:jdk安装、maven安装路径不能有中文和空格
B、解压即用,配置环境变量,可能需要初始化配置
环境变量 配置MAVEN_HOME 和Path ;%MAVEN_HOME%/bin;
测试安装 mvn -v 是否配置完成
C、初始化 --- 如果都不配置,均使用默认配置方式
镜像配置、jdk版本配置、本地仓库配置
本地库配置(默认配置:C/Users/Adminstrator/.m2/repository(默认用户家目录))
路径不含有中文和空格 maven路径 conf/settings
配置localRepositiory
镜像配置
常见:阿里、华为
阿里云maven镜像 https://maven.aliyun.com/mvn/guide
配置mirror
jdk版本(默认情况下,使用创建maven项目时,jdk版本默认1.5)
配置profile
1)存储内容---jar包
2)本地库和远程库
3)本地库:当前所使用的电脑中的路径
4)远程库:中央库、镜像库、私服
A、中央库:maven世界下的中心仓库 默认
B、镜像库:是中央库的副本 国内镜像目的提高下载速度
C、私服:局域网内的路径 (公司内部共用的仓库 指定的计算机 网络链接下载JAR包)
1)创建项目时,项目的目录结构规则
2)pom.xml 文件
A、pom---project object model 项目对象模型,对使用maven工具创建的项目进行了相关的定义,是maven项目的核心,在pom.xml文件中可以定义?
B、可以定义项目的打包方式、相关依赖、当前项目坐标(GAV)、jar包统一管理、相关插件配置等
3)坐标
用于确定jar包在仓库中的唯一位置的组成(groupId、artifactId、version)
1)和其他工具整合使用,比如和eclipse整合、和idea整合
2)eclipse 或者 idea 负责准备项目的原材料;maven项目的结构设计、jar包的管理、项目自动化构建;分工协作
3)idea工具和maven工具的整合
settings---bulid---build tools---maven
设置maven home directory
设置 settings files
设置 local repository
4)使用 idea+maven 创建项目(在 idea 整合 maven 之后使用综合性质的工具创建项目),只是借助了maven,符合 maven 要求的目录结构,那么项目就可以称为maven项目,但实际上项目的本质还是java项目或者web项目
A、创建java性质的maven项目
使用模板、也可以不使用模板
apache.maven下的quickstart模板
当前项目的坐标设置:
GroupId:组名,设置组名称,为项目实现分组,设置格式;通常是域名倒置,如:com.baidu;com.ujiuye,如果项目较为复杂,实现了分模块的设计,那么在 GroupId 中可以添加整体项目名称,如 com.ujiuye.xxx(整体项目名称)
ArtifactId:项目Id,设置项目名称(如果项目较为复杂,实现了分模块设计,那么artifactId可以设置模块名称)
Version:版本号,标志当前项目的开发版本;版本号的组成:大版本号、副版本号、小版本号、希腊字母(单词)
例如Spring 5.1.1.RELEASE
大版本号轻易不会改变,在 jdk 或者是项目的架构发生时才会修改此号
副版本号在项目中扩展了新的功能时候,会变化此号
小版本号变动频繁,主要是修复bug之后
希腊字母:标志当前项目处于哪个阶段,比如开发阶段、测试阶段、稳定版
com.offcn
maven_01
项目的属性标志:packaging标签 默认是Java项目
jar java项目 war web项目 pom 父项目
B、创建web性质的maven项目
两种 项目的属性标志:war web项目
1)假设项目原材料已经准备齐全,那么如何实现构建自动化操作
A、构建过程包含有主要的一些步骤:清理、编译、测试、报告、打包、安装、部署
B、对应这些步骤有关命令
清理:对应命令 clean 清除上一次编译的结果,为下一次重新编译做准备
编译:对应命令 complie,将 java 源程序进行编译
测试:对应命令 test 执行 test-java 中的测试代码
报告:展示测试结果
打包:对应命令package,将项目实现打包处理,java项目生成jar包,web项目生成war包
安装:对应命令 install,将打包成的包复制到本地库
部署:对应命令 deploy 将本地库jar包上传远程哭或者实现项目部署
2)生命周期
A、是指构建过程中的步骤实现分组(一个生命周期包含几个操作步骤);
B、maven生命周期包含三个:清理周期(clean、lifecycle)、默认周期(default lifecycle)、站点周期(site lifecycles)
C、当输入相关命令执行构建时,构建不是只执行指定的步骤,而是从本生命周期第一个命令步骤开始,执行到命令指定步骤
D、还可以使用组合命令(组合生命周期)实现不同周期执行一次性的操作
简化了人工操作
1)依赖:就是当我们的项目需要其他项目中的程序代码时,我们的项目中需要把其他项目引入,那么对于两个项目的关系来说,我们的项目依赖于被引入的项目;通常在项目中引入其他项目,实际上引入的是项目生成的jar包;所以把jar包看做依赖也可以;
2)如何把jar包引入到当前项目?在当前项目的pom.xml文件中,使用依赖配置来实现。
3)依赖的配置就是一个依赖的坐标配置,组成结构
dependency标签 groupId、artifactId、version
4)在依赖配置中,决定依赖的作用范围的配置
scope标签,通过此配置可以决定jar包中的程序在什么位置可以使用
scope标签的设置值有:compile(默认值)、test、provided
5)jar包管理
A、maven 可以实现 jar 包引入
B、jar包的传递---依赖的传递:如果乙项目中使用到丙项目生成的jar包,而甲项目又需要使用乙项目生成的jar包,那么maven工具在甲项目引入乙项目依赖时,也会把丙项目的依赖引入到甲项目中,此时在甲项目中会有两个jar包,甲项目pom.xml文件中不需要添加丙依赖配置,这是maven的jar包传递操作
C、按照maven的默认情况,丙项目jar包会向甲项目中传递,有些时候,可能在甲项目中不需要把丙传递过来,想实现不传递,可以考虑scope标签中的值设置(乙项目能做主 test和provided都排除依赖的传递)或者排除方式(exclusions标签exclusion标签groupId与artifactId)jar包排除操作
D、版本冲突的问题:同一种 jar 包不同版本的情况(在项目中 jar 包的依赖和传递等特点可能造成同一个 jar 包,出现不同版本),maven 工具帮助我们解决不同版本的冲突问题;解决的原则:就近原则(传递路径最短的优先)、声明原则(dependency上面的优先)
E、jar包的统一版本管理 抽离version
jar 包版本统一管理
properties自定义标签junit-version标签版本号
${junit-version} OGNL表达式使用 对象导航图语言(Object Graph Navigation Language),应用于EL。
项目结构---项目有哪些组成部分,这些部分之间存在什么关系
使用 maven 实现项目结构设计:简而言之就是通过maven可以帮助我们实现项目的组成划分,可以实现组成中各个成员之间关系的设置
如何划分组成,可以设置哪些关系?
1)继承关系:项目由多层父项目和子项目组成,项目和项目之间存在父子关系,子和子之间是并列关系
先建空项目,再建moudles,建父项目,建子项目指定parent
继承关系特点:对于父项目来说,不知道自己有哪些子项目;对于子项目来说,知道自己父项目是谁
继承关系作用:使用继承关系的项目结构,可以实现 jar包 的统一管理
使用 dependencies
缺点是子项目不需要的包也会继承
统一管理(即有 jar 包 又有版本) 区别继承(不同项目 jar 包不同 )
父项目使用 dependencyManagement 标签
子项目使用dependency 去掉version
2)聚合关系:项目由多层多个模块项目和一个聚合项目组成,聚合项目和模块之间存在父子关系,模块项目和模块项目之间并列关系
先建空项目,再建moudles,建父项目,建子项目指定moudle
聚合关系特点:对于聚合项目来说,知道自己包含哪些模块,对于模块项目来说不知道自己被哪个聚合项目包含;侧重于对项目进行功能划分
3)不论是继承关系项目还是聚合关系项目 父项目都是 pom 项目 GAVP maven 的四元组 src 路径可删除