目录
一、Maven简介
二、Maven下载与安装
三、Maven基本概念
(一)仓库
(二)坐标
四、手工制作一个Maven项目
五、 IDEA生成Maven项目
六、 依赖管理
七、生命周期与插件
八、分模块开发与设计
九、聚合
十、继承
十一、属性
十二、版本管理
1.工程版本:
2.工程版本号约定
十三、资源配置
十四、多环境开发配置
十五、跳过测试
十六、私服
一、Maven简介
(一)传统项目管理状态分析
1.jar包不统一,jar包不兼容
2.工程升级维护过程繁琐
(二)Maven是什么?
1.Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)
2.POM (Project Object Model):项目对象模型
(三)maven的作用:
1.项目构建:提供标准的、跨平台的自动化项目构建方式;
2.依赖管理:方便快捷的管理项目依赖的资源(jar包),避免资源间的版本冲突问题
3.统一开发结构:提供标准的、统一的项目结构
二、Maven下载与安装
(一)Maven下载
下载地址:Maven – Download Apache Maven
(二)Maven安装
Maven属于绿色版软件,解压即安装
bin目录:maven所有可运行的指令,其中有个mvn,实际上运行的就是这个文件,打开此文件可以看出需要配置以下环境
boot目录:里面有个jar包,是maven的类加载器
config目录:maven的配置文件
lib目录:maven所依赖的jar包
剩下的为协议、注意
(三)Maven环境变量配置
1.依赖Java,需要配置JAVA_HOME
2.设置MAVEN自身的运行环境,需要配置MAVEN_HOME
3.测试环境配置结果 指令:mvn -version
三、Maven基本概念
仓库:用于存储资源,包含各种jar包
仓库分类:
本地仓库:自己电脑上存储资源的仓库,连接远程仓库获取资源
远程仓库:非本机电脑上的仓库,为本地仓库提供资源
1.中央仓库:Maven团队维护,存储所有资源的仓库
2.私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源
私服的作用:
1.保存具有版权的资源,包含购买或自主研发的jar,中央仓库中的jar都是开源的,不能存储具有版权的资源
2. —定范围内共享资源,仅对内部开放,不对外共享
(二)坐标
什么是坐标?
Maven中的坐标用于描述仓库中资源的位置 Central Repository:
Maven坐标主要组成
groupld:定义当前Maven项目隶属组织名称(通常是域名反写,例如: org.mybatis)
artifactld:定义当前Maven项目名称(通常是模块名称,例如CRM、SMS)
version:定义当前项目版本号
packaging:定义该项目的打包方式
Maven坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载工作交由机器完成
在setting文件中配置阿里云的镜像坐标
<mirrors> <mirror> <!-- 此镜像的唯一标识符,用来区分不同的mirror元素 --> <id>nexus-aliyun</id> <!-- 对那种仓库进行镜像(就是替代哪种仓库)--> <mirrorOf>central</mirrorOf> <!-- 镜像名称 --> <name>Nexus aliyun</name> <!-- 镜像URL --> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>
四、手工制作一个Maven项目
Maven工程目录结构:
在src同层目录下创建pom.xml
Maven项目构建命令
Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔
mvn compile #编译 mvn clean #清理 mvn test #测试 mvn package #打包 mvn install #安装到本地仓库
五、 IDEA生成Maven项目
例:使用原型创建web项目,添加Tomcat插件
<build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>80</port> <path>/</path> </configuration> </plugin> </plugins> </build>
六、 依赖管理
1.依赖配置
依赖指的是当前项目运行所需要的jar,一个项目可以设置多个依赖
格式:
<!--设置当前项目所依赖的所有jar--> <dependencies> <!--设置具体的依赖--> <dependency> <!--依赖所属群组id--> <groupId></groupId> <!--依赖所属项目id--> <artifactId></artifactId> <!--依赖版本号--> <version></version> </dependency> </dependencies>
2.依赖传递
依赖具有传递性,包括直接传递和间接传递。
直接传递:在当前项目中通过依赖配置建立的依赖关系
间接传递:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源
依赖传递的冲突问题:路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
特殊优先:当同级配置了相同资源的不同版本,后配置的覆盖先配 置的
3.可选依赖
可选依赖指的是对外隐藏当前所依赖的资源---------不透明
<dependency> <groupId></groupId> <artifactId></artifactId> <version></version> <!--添加下面这一行--> <optional>true</optional> </dependency>
4.排除依赖
排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
<dependency> <groupId></groupId> <artifactId></artifactId> <version></version> <exclusions> <exclusion> <groupId></groupId> <artifactId></artifactId> </exclusion> </exclusions> </dependency>
5.依赖范围
依赖的jar包默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围:
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件夹范围内)
是否参与打包(package文件夹范围内)
依赖范围具有传递性(带有依赖范围的资源在进行传递时,作用范围将受到影响)
七、生命周期与插件
Maven项目构建生命周期描述的是一次构建过程经历了多少个事件
Maven对项目构建的生命周期划分为3套
clean:清理工作 生命周期:pre-clean ===>clean ===>post-clean
default:核心工作,例如编译、测试、打包、部署等
site:产生报告,发布站点等
生命周期:pre-site ===>site ===>post-site ===>site-deploy
插件:
插件与生命周期内的阶段绑定,在执行到对应的生命周期时执行对应的插件功能
默认maven在各个生命周期上绑定有预设的功能
通过插件可以自定义其他功能
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-source-plugin</artifactId> <version>2.2.1</version> <executions> <execution> <goals> <goal>jar</goal> </goals> <phase> generate-test-resources</phase> </execution> </executions> </plugin> </plugins> </build>
八、分模块开发与设计
将一个项目分成多个模块开发(pojo,dao,service,controller)
九、聚合
作用:聚合用于快速构建Maven工程,一次性构建多个项目/模块。
制作方式:创建一个空模块,打包类型定义为pom
<packaging>pom</packaging>
定义当前模块进行构建操作时关联的其他模块名称
<modules> <module>模块地址</module> <module>模块地址</module> <module>模块地址</module> <module>模块地址</module> </modules>
注意:参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关
作用:通过继承可以实现在子工程中沿用父工程中的配置
制作方式:在子工程中生命其父工程坐标与对应的位置
<!--定义该工程的父工程--> <parent> <groupId></groupId> <artifactId></artifactId> <version></version> <!--填写父工程的pom文件--> <relativePath>父工程pom文件地址</relativePath> </parent>
在父工程中定义依赖管理
<!--声明此处进行依赖管理--> <dependencyManagement> <!--具体的依赖--> <dependencies> <dependency> <groupId></groupId> <artifactId></artifactId> <version></version> </dependency> </dependencies> </dependencyManagement>
继承依赖使用:在子工程中定义依赖关系,无需声明依赖版本,版本参照父工程中依赖的版本
<dependencies> <dependency> <groupId></groupId> <artifactId></artifactId> </dependency> </dependencies>
继承的资源:
聚合与继承的异同点:
作用:聚合用于快速构建项目,继承用于快速配置
相同点:
聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中
聚合与继承均属于设计型模块,并无实际的模块内容
不同点:
聚合是在当前模块中配置关系,聚合可以感知到参与聚合的模块有哪些
继承是在子模块中配置关系,父模块无法感知哪些子模块继承了自己
十一、属性
1.自定义属性
作用:等同于定义变量,方便统一维护
定义格式:
<!--定义自定义属性--> <properties> <spring.version>5.1.9.RELEASE</spring.version> <junit.version>4.12</junit.version> </properties>
调用格式:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency>
2.内置属性
作用:使用Maven内置属性,快速配置
调用格式:
${basedir} ${version}
3.Setting属性
作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:
${settings.localRepository}
4.Java系统属性
作用:读取Java系统属性
调用格式:
${user.home}
系统属性查询方式:
mvn help:system
5.环境变量属性
作用:使用Maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:
${env.JAVA_HOME}
环境变量属性查询方式:
mvn help:system
十二、版本管理
1.工程版本:
SNAPSHOT(快照版本)
1.项目开发过程中,为方便团队成员合作,解决模块间相互依赖和时时更新的问题,开发者对每个模块进行构建的时候,输出的临时性版本叫快照版本(测试阶段版本)
2.快照版本会随着开发的进展不断更新
RELEASE(发布版本)
项目开发到进入阶段里程碑后,向团队外部发布较为稳定的版本,这种版本所对应的构件文件是稳定的,即便进行功能的后续开发,也不会改变当前发布版本内容,这种版本称为发布版本
2.工程版本号约定
1. <主版本>.<次版本>.<增量版本>.<里程碑版本>
2. 主版本:表示项目重大架构的变更,如: spring5相较于spring4的迭代
3. 次版本:表示有较大的功能增加和变化,或者全面系统地修复漏洞增量版本:表示有重大漏洞的修复
4. 里程碑版本:表明一个版本的里程碑(版本内部)。这样的版本同下一个正式版本相比,相对来说不是很稳定,有待更多的测试
十三、资源配置
配置文件引用pom属性
作用:在任意配置文件中加载pom文件中定义的属性
调用格式
${地址}
开启配置文件加载pom属性
<!--配置资源文件对应的信息--> <resources> <resource> <!--设定配置文件对应的位置目录,支持使用属性动态设定路径--> <directory>地址</directory> <!--开启对配置文件的资源加载过滤--> <filtering>true</filtering> </resource> </resources>
四、多环境开发配置
<!--创建多环境--> <profiles> <!--定义具体的环境:生产环境--> <profile> <!--定义环境对应的唯一名称--> <id>开发环境名称1</id> <!--定义环境中的专用的属性值--> <properties> <jdbc.url>jdbc链接</jdbc.url> </properties> <activation> <activeByDefault>true</activeByDefault> </activation> </profile> <!--定义具体的环境:开发环境--> <!--格式同上--> </profiles>
加载指定环境配置:
调用格式:mvn 指令 -p 环境定义id
范例: mvn install -p pro_env
使用命令跳过测试:mvn 指令 -D skipTests
注意:执行的指令生命周期必须包含测试环节
使用配置跳过测试:
十六、私服
1.Nexus下载:Download
启动服务器命令:nexus.exe /run nexus
启动完成
修改基础配置信息:
安装路径下etc目录中nexus-default.properties文件保存有nexus基础配置信息,例如默认访问端口
修改服务器运行配置信息:
安装路径下bin目录中nexus.vmoptions文件保存有nexus服务器启动对应的配置信息,例如默认占用内存空间
2.仓库分类
宿主仓库hosted
保存无法从中央仓库获取的资源
1.自主研发
2.第三方非开源项目
代理仓库proxy
代理远程仓库,通过nexus访问其他公共仓库,例如中央仓库
仓库组group
将若干个仓库组成一个群组,简化配置
仓库组不能保存资源,属于设计型仓库
3.资源上传
上传资源时提供对应的信息
1.保存的位置(宿主仓库) 2.资源文件 3.对应坐标
4.访问私服配置(本地仓库访问私服)
配置本地仓库访问私服的权限(setting.xml)
配置本地仓库资源来源(setting.xml)
5. 访问私服配置(项目工程访问私服)
配置当前项目访问私服上传资源的保存位置(pom.xml)
发布资源到私服的命令
mvn deploy