1 Maven概述
1.1 什么是Maven
Maven 是一款用于管理和构建Java项目的工具,是Apache旗下的一个开源项目 。
maven官网https://maven.apache.org/
2 Maven的作用
注:Maven环境的配置及项目的创建我们在下一部分讲,首先看一下Maven的作用
1.依赖管理:方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题。
2.项目构建:Maven 还提供了标准化的跨平台的自动化构建方式。
3.统一项目结构:Maven 也提供了标准、统一的项目结构 。
2.1 依赖管理
2.1.1 使用maven前
我们项目中要想使用某一个jar包,就需要把这个jar包从官方网站下载下来,然后再导入到项目中。然后在这个项目中,就可以使用这个jar包了。
JAR(Java Archive)包是一种用于聚合多个文件(如 Java 类文件、资源文件等)到一个压缩文件(通常使用 ZIP 格式)中的文件格式。JAR 包的主要用途包括:
分发 Java 应用程序:将所有相关的类文件和资源文件打包成一个 JAR 包,便于分发。
复用和共享代码:将常用的库或模块打包成 JAR 包,方便在其他项目中引用。
提高加载速度:JAR 包可以直接通过 Java 虚拟机加载,无需逐个加载文件。
2.1.2 使用maven后
当使用maven进行项目依赖(jar包)管理,则很方便的可以解决这个问题。 我们只需要在maven项目的pom.xml文件中,添加一段如下的配置即可实现。
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.16.1</version>
</dependency>
</dependencies>
2.2 项目构建
如果我们开发了一套系统,代码需要进行编译、测试、打包、发布等过程,这些操作是所有项目中都需要做的,如果反复进行就显得特别麻烦,而Maven提供了一套简单的命令来完成项目构建。
通过Maven中的命令,就可以很方便的完成项目的编译(compile)、测试(test)、打包(package)、发布(deploy) 等操作。
2.3 统一项目结构
2.3.1 使用maven前
由于java的开发工具有很多,除了大家熟悉的IDEA以外,还有像早期的Eclipse、MyEclipse。而不同的开发工具,创建出来的java项目的目录结构是存在差异的,那这就会出现一个问题:Eclipse创建的java项目,并不能直接导入IDEA中;IDEA创建的java项目,也没有办法直接导入到Eclipse中。
2.3.2 使用maven后
而如果我们使用了Maven这一款项目构建工具,它给我们提供了一套标准的java项目目录,也就是说,无论我们使用的是什么开发工具,只要是基于maven构建的java项目,最终的目录结构都是相同的。 这样,我们使用Eclipse、MyEclipse、IDEA创建的maven项目,就可以在各个开发工具直接直接导入使用了,更加方便、快捷。
2.4 Maven模型
- 构建生命周期/阶段(Build lifecycle & phases)
- 项目对象模型(Project Object Model)
- 依赖管理模型(Dependency)
2.4.1 构建生命周期/阶段
图中紫色框起来的部分,就是用来完成标准化构建流程 。当我们需要编译,Maven提供了一个编译插件供我们使用;当我们需要打包,Maven就提供了一个打包插件供我们使用等。
2.4.2 项目对象模型
图中紫色框起来的部分属于项目对象模型,就是将我们自己的项目抽象成一个对象模型,有自己专属的坐标。
坐标,就是资源(jar包)的唯一标识,通过坐标可以定位到所需资源(jar包)位置。
就像3.1.2中的代码,坐标的组成部分有:
groupId: 组织名
arfitactId: 模块名
Version: 版本号
2.4.3 依赖管理模型
图中绿色框起来的部分属于依赖管理模型,是使用坐标来描述当前项目依赖哪些第三方jar包。
之前我们项目中需要jar包时,直接就把jar包复制到项目下的lib目录,而现在我们只需要在pom.xml中配置依赖的配置文件即可。 而这个依赖对应的jar包其实就在我们本地电脑上的maven仓库中。
2.5 Maven仓库
仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(就是jar包)和插件
Maven仓库分为:
本地仓库:自己计算机上的一个目录(用来存储jar包)
中央仓库:由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven2/
远程仓库(私服):一般由公司团队搭建的私有仓库
3 Maven的安装及使用
3.1 下载Maven
这里我下载的是3.9.4版本的,选择下载最新版本即可
3.2 安装Maven
Maven安装配置步骤:
解压安装
配置仓库
配置阿里云私服
配置Maven环境变量
1) 解压 apache-maven-3.9.4-bin.zip(解压即安装)
建议解压到没有中文、特殊字符的路径下。
2) 配置本地仓库
1.在自己计算机上新一个目录(本地仓库,用来存储jar包)
2.进入到conf目录下修改settings.xml配置文件
使用超级记事本或者Sublime Test,打开settings.xml文件,定位到53行
复制<localRepository>标签,粘贴到注释的外面(55行)
复制之前新建的用来存储jar包的路径,替换掉<localRepository>标签体内容
3) 配置阿里云私服
由于中央仓库在国外,所以下载jar包速度可能比较慢,而阿里公司提供了一个远程仓库,里面基本也都有开源项目的jar包。
进入到conf目录下修改settings.xml配置文件: 使用超级记事本或者Sublime Test,打开settings.xml文件,定位到160行左右,在<mirrors>标签下为其添加子标签<mirror>,内容如下:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
4) 配置环境变量
Maven环境变量的配置类似于JDK环境变量配置一样
1.在系统变量处新建一个变量MAVEN_HOME。 MAVEN_HOME环境变量的值,设置为maven的解压安装目录,如:D:\Maven\apache-maven-3.9.4-bin\apache-maven-3.9.4
注:不要写成包的目录,是其下一级没有bin后缀的目录
2.在Path中进行配置。 PATH环境变量的值,设置为:%MAVEN_HOME%\bin
3.win + r 并输入cmd打开DOS命令提示符进行验证,输入命令符 mvn -v ,出现如图所示表示安装成功 。
5) 配置关联的JDK版本(可选)
进入到conf目录下修改settings.xml配置文件,在 <profiles> </profiles>中增加如下配置:
<profile>
<id>jdk-17</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>17</jdk>
</activation>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
</properties>
</profile>
4 IDEA继承Maven
4.1 创建Maven项目
4.1.1 老版本中Maven项目的创建
在2021版本的idea中,Maven项目的创建如同Java项目创建一样,依旧是 文件 => 新建 => 项目 只不过在新建项目时创建的时maven项目
然后命名项目点击完成即可创建,创建之后点击 项目结构
再选择 模块 并应用即可
4.1.2 新版本中Maven项目的创建
学习IDEA集成Maven时,建议用新版本的IDEA,这里以2024版本为例
首先在file中点击close project关闭当前项目,进入欢迎界面
而后选择Customise => All settings => Build,Execution,Deployment => Build Tools => Maven
如同选择正确的文件目录
然后点击左侧runner,选择下载好的JRE版本
接着点击Compliter => Java Compliter 配置编译版本
这里所设置的maven的环境信息,并未指定任何一个project,此时设置的信息就属于全局配置信息。 以后,我们再创建project,默认就是使用我们全局配置的信息。
4.1.3创建项目
创建一个空项目并命名
创建好之后在file中选择project structure设置JDK版本号然后点击apply应用
接着创建Maven模块
在main中创建hello类输出Hello Maven
4.2 pom文件详解
POM (Project Object Model) :指的是项目对象模型,用来描述当前的maven项目。
使用pom.xml文件描述当项目
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--POM模型版本-->
<modelVersion>4.0.0</modelVersion>
<!--当前项目坐标-->
<groupId>org.example</groupId>
<artifactId>maven-exp-project01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--项目JDK版本及编码-->
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
pom文件详解:
<project>
:pom文件的根标签,表示当前maven项目
<modelVersion>
:声明项目描述遵循哪一个POM模型版本
虽然模型本身的版本很少改变,但它仍然是必不可少的。目前POM模型版本是4.0.0
坐标 :
<groupId>
<artifactId>
<version>
定位项目在本地仓库中的位置,由以上三个标签组成一个坐标
<maven.compiler.source>
:编译JDK的版本
<maven.compiler.target>
:运行JDK的版本
<project.build.sourceEncoding>
: 设置项目的字符集
4.3 Maven坐标
什么是坐标?
Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置
使用坐标来定义项目或引入项目中需要的依赖
Maven坐标主要组成:
groupId:定义当前Maven项目隶属组织名称(通常是域名反写,例如:org.example)
artifactId:定义当前Maven项目名称(通常是模块名称,例如 order-service、goods-service)
version:定义当前项目版本号
SNAPSHOT: 功能不稳定、尚处于开发中的版本,即快照版本
RELEASE: 功能趋于稳定、当前更新停止,可以用于发行的版本
4.4 Maven项目的导入
在IDEA中导入maven项目有两种方式
4.4.1 方式一
File -> Project Structure -> Modules -> Import Module -> 选择maven项目的pom.xml。
4.4.2 方式二
Maven面板 -> +(Add Maven Projects) -> 选择maven项目的pom.xml。