1)Maven是什么
Maven是基于项目对象模型(POM project object model),可以通过一小段描述信息(配置)来管理项目的构建,报告和文档的软件项目管理工具。
Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)。
POM (Project ObjectModel) :项目对象模型。
2)Maven的作用
项目构建:提供标准的、跨平台的自动化项目构建方式。
依赖管理:方便快捷的管理项目依赖的资源(jar包) , 避免资源间的版本冲突问题。不用自己手动去下载jar ,pom文件会自动管理下载好的jar包。
统一开发结构:提供标准的、统一的项目结构。
用来解决导入java类依赖的jar,编译java项目主要问题。
1)Maven下载
官网
Maven – Welcome to Apache Maven
https://maven.apache.org/
下载地址
Maven – Download Apache Maven
https://maven.apache.org/download.cgi
Binary(bin)是可执行版本,已经编译好可以直接使用。
Source (src)是源代码版本,需要自己编译成可执行软件才可使用。
tar.gz和zip两种压缩格式,其实这两个压缩文件里面包含的内容是同样的,只是压缩格式不同。
tar.gz格式的文件比zip文件小很多,用于unix操作系统。
zip格式用于Windows操作系统,但在Windows系统使用WinRar工具一样能够解压缩tar.gz格式 。
2)安装与配置
下载完成后,选择一个路径进行解压,不建议放在c盘
去配置环境变量,如下图
此电脑→属性→高级系统设置→环境变量→系统变量→新建变量→填写好变量名和变量值→去path配置路径
系统变量:变量名:MAVEN_HOME
,变量值:你解压Maven文件所在的地址
系统变量:path :%MAVEN_HOME%\bin
3.然后win+R运行cmd,输入mvn -v
或 mvn -version
,如图所示则配置成功
3)配置本地仓库
因为如果如果不手动配置一个手动仓库,Maven会自动给你添加到默认地址也就是c盘中的.m2的位置,随着导入的包越来越多,也会占用越来越多内存导致电脑运行速度慢。所以需要自己配置一个本地仓库并且设置以后从中央仓库下载到的包放在自己设置的仓库中。
1.在maven根目录下创建一个repository文件夹,作为本地仓库。
在你解压安装Maven文件的路径下\conf下找到settings.xml文件
找到节点localRepository,在注释外添加
你所新建的仓库地址
localRepository节点用于配置本地仓库,本地仓库其实起到了一个缓存的作用,它的默认地址是 C:\Users\用户名.m2。
当我们从maven中获取jar包的时候,maven首先会在本地仓库中查找,如果本地仓库有则返回;如果没有则从远程仓库中获取包,并在本地库中保存。
全局setting与用户setting区别
●全局setting定义了该系统中所有用户的配置
●用户setting定义了当前用户的配置
4)配置阿里云的镜像仓库
因为如果都是从中央仓库中获取的话速度会很慢,因为中央仓库的地址在国外,所以我们需要用到阿里云创建的地址去访问中央仓库 ,这样下载jar包的速度比较快。
步骤如下:
在settings.xml配置文件中找到mirrors节点。
添加如下配置(注意要添加在和两个标签之间)。
<mirror>
<id>alimavenid>
<mirrorOf>centralmirrorOf>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/repositories/central/url>
mirror>
5)配置完成后,预下载。
运行cmd,输入mvn help:system
测试,Maven相关工具自动帮我们到Maven中央仓库下载缺省的或者Maven中央仓库更新的各种配置文件和类库(jar包)到Maven本地仓库中。
什么是坐标?Maven中的坐标用于描述仓库中资源的位置
Central Repository: (maven.org)
https://repo1.maven.org/maven2/
Maven坐标主要组成
Maven坐标的作用
1)工程目录结构
2)Maven构建项目命令
Maven构建命令使用mvn开头,后面添加功能参数,可以一次执行多个命令,使用空格分隔。
mvn compile # 编译
mvn clean # 清理
mvn test # 测试
mvn package # 打包
mvn intall 安装到本地仓库
3)在IDEA中配置Maven
1.找到maven设置
2.设置相关
3.使用骨架创建Maven程序
4.安装Tmcat7运行插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.mavengroupId>
<artifactId>tomcat7-maven-pluginartifactId>
<version>2.1version>
<configuration>
<port>82port>
<path>/path>
configuration>
plugin>
plugins>
build>
依赖指当前项目运行所需的jar,一个项目可以设置多个依赖。
格式如下:
<dependencies>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.12version>
<optional>trueoptional>
dependency>
dependencies>
依赖具有传递性
直接依赖:在当前项目中通过依赖配置建立的依赖关系
间接依赖: 被资源的资源如果依赖其他资源,当前项目间接依赖其他资源
依赖传递冲突问题的优先顺序
可选依赖指对外隐藏当前所依赖的资源——不透明
<dependencies>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.12version>
<optional>trueoptional>
dependency>
dependencies>
·排除依赖指主动断开依赖的资源,被排除的资源无需指定版本——不需要
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
<exclusions>
<exclusion>
<groupId>org.hamcrestgroupId>
<artifactId>hamcrest-coreartifactId>
exclusion>
exclusions>
dependency>
依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围
scope | 主代码 | 测试代码 | 打包 | 范例 |
---|---|---|---|---|
compile(默认) | Y | Y | Y | log4j |
test | Y | junit | ||
provided | Y | Y | sevlet-api | |
runtime | jdbc |
7)依赖范围传递性
带有依赖范围的资源在进行传递时,作用范围将受到影响
compile | test | provided | runtime(改行直接依赖) | |
---|---|---|---|---|
compile(该列间接依赖) | compile | test | provided | runtime |
test | ||||
provided | ||||
runtime | runtime | test | provided | runtime |
1)项目构建生命周期
Maven构建生命周期描述的是一次构建过程经历经历了多少个事件
Maven对项 目构建的生命周期划分为3套
2) clean生命周期
pre-clean 执行一-些需要在clean之前完成的工作
clean 移除所有上一次构建生成的文件
post-clean 执行一些需要在clean之 后立刻完成的工作
3)default构建生命周期
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-poCm1n1O-1659838250624)(Maven.assets/image-20220807091557867.png)]
4)site构建生命周期
●pre-site 执行一些需要在生成站点文档之前完成的工作
●site 生成项目的站点文档
●post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
●site-deploy 将生成的站点文档部署到特定的服务器上
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-source-pluginartifactId>
<version>2.2.1version>
<executions>
<execution>
<goals>
<goal>jargoal>
<goal>test-jargoal>
goals>
<phase>generate-test-resourcesphase>
execution>
executions>
plugin>
plugins>
build>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
<dependency>
<artifactId>demo3artifactId>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
dependency>
dependencies>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P6bOaEyv-1659838250625)(Maven.assets/image-20220805091243547.png)]
### 可选依赖
可选依赖指对外隐藏所依赖的资源——不透明
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13version>
<optional>trueoptional>
dependency>
dependencies>
不想让别的项目继承该依赖
optional属性为true时(默认为false),其他项目引用该项目时,该依赖看不到。
<dependency>
<artifactId>demo3artifactId>
<groupId>org.examplegroupId>
<version>1.0-SNAPSHOTversion>
<exclusions>
<exclusion>
<groupId>junitgroupId>
<artifactId>junitartifactId>
exclusion>
exclusions>
dependency>
排除传递过来不需要的依赖。
依赖的jar默认情况可以在任何地方使用,可以通过scope标签设定其作用范围
作用范围
高级教程持续更新中…