一、简介
Maven是apache旗下的开源项目,是一款用于管理和构建java项目的工具。 基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建。
在Maven项目中,有一个核心文件pom.xml。POM项目对象模型定义了项目的基本信息,用于描述心目如何构建,声明项目依赖。
没有任何的实际Java代码,我们就能顶一个Maven项目的POM,这体现了Maven的一大优点,它能让项目对象模型最大程度地与实际代码相互独立,即解耦,或者正交性。这在很大程度上避免了Java代码和POM代码的相互影响。比如当项目需要升级版本时,只需要修改POM,而不需要更待Java代码;而在POM稳定之后,日常的Java代码开发工作基本不涉及POM的修改。
下面的pom文件即为一个xml。
作用:
统一的项目结构:
标准的项目构建:
模型:
仓库jar包来源于maven目录下的mvn_repo文件夹,其中包含了大量的、不同版本的jar包。
仓库:用于存储资源,管理各种jar包
- 本地仓库:自己计算机上的一个目录
- 中央仓库:由Maven团队维护的全球唯一的。
- 远程仓库:一般由公司团队搭建的私有仓库
二、Maven的安装
1、解压apach-maven-3.6.1-bin-zip
2、配置本地仓库,修改conf/settings.xml中的<loaclRepository>为一个指定目录
在maven文件夹下新建文件夹名为mvn-repo,将其作为本地仓库。
下载的jar包将会自动存放在mvn-repo目录(本地仓库)下。
3、配置阿里云私服,修改conf/settings.xml中的<mirrors>标签,为其添加如下子标签:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4、配置环境变量,MAVEN_HOME为maven的解压目录,并将其bin加入PATH环境变量
系统变量:
变量名为MAVEN_HOME
变量值为maven的解压目录
path环境变量:
打错了HOME
成功后,maven的命令在任意目录均可以运行。
5、测试
主流jdk为11.0.1版本,将17版本改为11版本,并重新配置环境变量
对于环境变量理解:在系统变量中设置变量名与变量值,如xxx_HOME为变量名,其变量值即为解压出来的文件路径。其次再配置环境变量,环境变量主要格式为%变量名%\bin(可执行的文件夹的路径)。先配置系统变量,再配置环境变量,系统变量值为解压路径,环境变量值为可执行文件的路径。如下:
系统变量:
环境变量path:
三、IDEA集成Maven
一、配置Maven环境
并将Maven下的Runner也改为jdk11版本。
二、创建Maven项目
idea2022
模块名称、坐标信息:file--->New Module
当首次创建时,将会下载jar包到本地仓库中。
出现以下错误:
解决方案(未解决):
解决方案(idea2022)---以下是建立个webMaven:
Archetype这一项一定要点击选择!!!!!!!!!!!!再点击Add添加坐标!!!!!!!!!!!。
成功后目录结构如下:
以下是创建普通的Maven:
目录结构如下:
当运行显示java: 错误: 不支持发行版本 5 是jdk版本不一致
在pom.xml添加如下代码:
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
三、idea导入Maven项目
四、依赖管理
一、依赖管理
二、依赖传递
三、依赖范围
五、生命周期
Maven的生命周期就是对所有的maven项目构建过程进行抽象和统一。
- clean :移除上一次构建生成的文件
- compile:编译项目源代码
- test:使用合适的单元测试框架运行测试(junit)
- package:将编译后的文件打包,如jar,war等
- install:安装项目到本地仓库
在同一套生命周期中,当运行到后面的阶段时,前面的阶段都会运行。
运行生命周期两种方式:
- 在idea中,右侧的maven工具栏,选中对应的生命周期,双击运行
- 在命令行中,通过命令执行
mvn clean
mvn compile
mvn package
mvn test
执行mvn clean此时项目下的target目录将消失。
若显示mvn不是可执行文件等等,将maven添加到用户变量中即可。