Maven
点击按钮,AI 将为你生成这篇文章的摘要
Maven的作用
依赖管理
方便快捷的管理项目依赖的资源(jar包),避免版本冲突问题
当使用maven进行项目依赖(jar包)管理,则很方便的可以解决这个问题。 我们只需要在maven项目的pom.xml文件中,添加一段如下图所示的配置即可实现
项目构建
我们开发了一套系统,代码需要进行编译、测试、打包、发布,这些操作如果需要反复进行就显得特别麻烦,而Maven提供了一套简单的命令来完成
相关配置
Maven仓库:用于存储资源,管理各种jar包.
下载maven后进行解压,解压后的目录结构:
- bin目录 : 存放的是可执行命令。(mvn 命令重点关注)
- conf目录 :存放Maven的配置文件。(settings.xml配置文件后期需要修改)
- lib目录 :存放Maven依赖的jar包。(Maven也是使用java开发的,所以它也依赖其他的jar包)
进入到conf目录下修改settings.xml配置文件
1). 使用超级记事本软件,打开settings.xml文件,定位到53行
2). 复制标签,粘贴到注释的外面(55行)
3). 复制之前新建的用来存储jar包的路径,替换掉标签体内容
4)定位到160行左右,配置阿里云私服
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf></mirror>注: 只可配置一个(另一个要注释!) ,不然两个可能发生冲突,导致jar包无法下载
在系统变量处新建一个变量MAVEN_HOME
PATH环境变量的值,新建一个,设置为:%MAVEN_HOME%\bin
在cmd中执行mvn-v查看。Maven3.6.1要JDK8才行,之前用JDK6就会报错
设置IDEA使用本地安装的Maven,并修改配置文件及本地仓库路径1. 配置本地仓库
在 conf/settings.xml 中配置 <localRepository> 标签,指定本地仓库路径,用于存储下载的 jar 包。
<localRepository>E:/maven/repository</localRepository>2. 配置阿里云私服
中央仓库在国外,下载速度较慢。在 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>3. 配置环境变量
- 新建系统变量
MAVEN_HOME,值为 Maven 解压安装目录 - 在
Path中添加%MAVEN_HOME%\bin - 验证安装:命令行执行
mvn -v,输出版本信息表示安装成功
4. 配置关联 JDK 版本(可选)
在 conf/settings.xml 的 <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>常见问题:依赖下载失败
问题现象:Maven 项目中添加的依赖未正确下载,右侧 Maven 面板中依赖报红,reload 重新加载也不会再下载。
产生原因:由于网络原因,依赖下载不完整,Maven 仓库中生成了 xxx.lastUpdated 文件,该文件不删除则不会重新下载。
解决方案:
- 根据 Maven 依赖坐标,找到仓库中对应的
xxx.lastUpdated文件并删除,然后重新加载项目。 - 通过命令
del /s *.lastUpdated批量递归删除指定目录下的所有xxx.lastUpdated文件。 - 依赖下载完成后,若 Maven 面板仍然报红,可关闭 IDEA 后重新打开加载项目。
注意事项
- 安装路径中避免包含中文和空格。
- 配置
settings.xml时注意标签的嵌套层级,<mirror>必须在<mirrors>内部。 - 首次下载依赖时耗时较长,需耐心等待。
项目配置与坐标
全局设置一些信息
选择 IDEA中 File => close project
打开 All settings , 选择 Build,Execution,Deployment => Build Tools => Maven
创建Maven项目
填写模块名称,坐标信息,点击finish,创建完成
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>com.itheima</groupId> <artifactId>maven_project1</artifactId> <version>1.0-SNAPSHOT</version>
<!-- 打包方式 --> <packaging>jar</packaging>
</project>
src/main/java:源代码文件src/main/resources:源代码配置文件src/test/java:测试代码文件src/test/resources:测试代码配置文件target:编译、打包生成文件存放目录
Maven仓库
仓库本质是一个目录(文件夹),用于存储开发中所有依赖(jar 包)和插件。
Maven 仓库分为三类:
| 仓库类型 | 说明 |
|---|---|
| 本地仓库 | 自己计算机上的目录,用来存储 jar 包 |
| 中央仓库 | 由 Maven 团队维护的全球唯一仓库,地址:https://repo1.maven.org/maven2/ |
| 远程仓库(私服) | 一般由公司团队搭建的私有仓库 |
jar 包查找顺序
当项目中使用坐标引入依赖 jar 包后:
- 先查找本地仓库中是否有对应的 jar 包
- 有 → 项目直接引用
- 没有 → 去中央仓库下载到本地仓库
- 如果搭建了远程仓库(私服),查找顺序变为:本地仓库 → 远程仓库 → 中央仓库
生命周期
| 阶段 | 说明 |
|---|---|
clean | 移除上一次构建生成的文件 |
compile | 编译项目源代码 |
test | 使用单元测试框架运行测试(JUnit) |
package | 将编译后的文件打包(jar、war 等) |
install | 安装项目到本地仓库 |
执行顺序:同一套生命周期中,阶段是有顺序的,后面的阶段依赖于前面的阶段。执行后面的生命周期时,前面的生命周期都会执行。
跨生命周期:package 和 compile 属于同一套生命周期,执行 package 时 compile 会自动运行;但 clean 与 package 不属于同一套,执行 package 时 clean 不会运行。
插件机制
Maven 的生命周期是抽象的,生命周期本身不做任何实际工作。实际任务(如源代码编译)都交由插件来完成。
生命周期顺序:clean → validate → compile → test → package → verify → install → site → deploy
日常开发重点关注:clean → compile → test → package → install
mvn compile # 编译mvn test # 测试mvn package # 打包mvn install # 安装到本地仓库- 同一套生命周期中,执行后面的阶段会自动执行前面所有阶段。
- 不同套的生命周期互不影响(如
clean和default互不触发)。 - 生命周期本身是抽象定义,具体工作由插件实现。
分模块设计与开发
1). 什么是分模块设计:将项目按照功能拆分成若干个子模块
2). 为什么要分模块设计:方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享
3). 注意事项:分模块设计需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
比如说,将pojo包下的实体类,抽取到一个maven模块中 tlias-pojo
1.创建maven模块 tlias-pojo,存放实体类
2.然后在tlias-pojo中创建一个包 com.itheima.pojo (和原来案例项目中的pojo包名一致)
3.将原来案例项目 tlias-web-management 中的pojo包下的实体类,复制到tlias-pojo模块中
4.在 tlias-pojo 模块的pom.xml文件中引入依赖
5.删除原有案例项目tlias-web-management的pojo包【直接删除不要犹豫,我们已经将该模块拆分出去了】,然后在pom.xml中引入 tlias-pojo的依赖
<dependency> <groupId>com.itheima</groupId> <artifactId>tlias-pojo</artifactId> <version>1.0-SNAPSHOT</version></dependency>支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!