Maven

Maven是Apache旗下的一个开源项目,是一款用于管理和构建java项目的工具。

https://maven.apache.org/

maven作用

  • 依赖管理
  • 统一项目结构
  • 项目构建

Maven模型

  • 项目对象模型(Project Object Model)
  • 依赖管理模型(Dependency)
  • 构建生命周期/阶段(Build lifecycle & phases)

Maven仓库

用于存储资源,管理各种jar包

仓库的本质就是一个目录(文件夹),这个目录被用来存储开发中所有依赖(就是jar包)和插件。
Maven仓库分为:

  • 本地仓库:自己计算机上的一个目录(用来存储jar包)
  • 中央仓库:由Maven团队维护的全球唯一的。仓库地址:https://repo1.maven.org/maven 2/
  • 远程仓库(私服):一般由公司团队搭建的私有仓库

POM配置详解

POM (Project Object Model):指的是项目对象模型,用来描述当前的maven项目。

Maven中的坐标是资源的唯一标识 , 通过该坐标可以唯一定位资源位置。

  • 使用坐标来定义项目或引入项目中需要的依赖。

Maven坐标主要组成:

  • groupId:定义当前Maven项目隶属组织名称(通常是域名反写)
  • artifactId:定义当前Maven项目名称(通常是模块名称)
  • version:定义当前项目版本号

maven仓库,搜索需要的坐标:https://mvnrepository.com/

添加maven项目:

或使用Alt+Insert快捷键,在Ideal中快捷插入。

每次修改完pom文件,都需要刷新重新加载maven项目,引入新加入的坐标。

依赖传递

依赖传递可以分为:

  1. 直接依赖:在当前项目中通过依赖配置建立的依赖关系。
  2. 间接依赖:被依赖的资源如果依赖其他资源,当前项目间接依赖其他资源。
  • projectA依赖了projectB。对于projectA 来说,projectB 就是直接依赖。
  • projectB依赖了projectC及其他jar包。 那么此时,在projectA中也会将projectC的依赖传递下来。对于projectA来说,projectC就是间接依赖。

排除依赖

排除依赖:指主动断开依赖的资源。(被排除的资源无需指定版本)

作用范围

Maven生命周期

Maven对项目构建的生命周期划分为3套(相互独立):

  • clean:清理工作。
  • default:核心工作。如:编译、测试、打包、安装、部署等。
  • site:生成报告、发布站点等。


Maven的生命周期是抽象的,这意味着生命周期本身不做任何实际工作。在Maven的设计中,实际任务(如源码编译)都交由插件来完成。

在同一套生命周期中,我们在执行后面的生命周期时,前面的生命周期都会执行。

清理maven仓库

可能由于网络的原因,jar包下载不完全,这些不完整的jar包都是以lastUpdated结尾。此时,maven不会再重新帮你下载,需要你删除这些以lastUpdated结尾的文件,然后maven才会再次自动下载这些jar包。

bash 复制代码
set REPOSITORY_PATH=%USER%\.m2\repository\mvn_repo
rem 正在搜索...
del /s /q %REPOSITORY_PATH%\*.lastUpdated
rem 搜索完毕
pause

参考

相关推荐
bksczm5 小时前
InnoDB 行格式详解:DYNAMIC / COMPACT / COMPRESSED / REDUNDANT
java·开发语言·数据库
liangbo76 小时前
Spring系列03:Bean 的三种注册方式
java·spring
余槐i6 小时前
MySQL 8.0 联合索引走错:为什么加了索引查询反而从 200ms 变成 8s
java·spring boot·mysql·docker·性能优化
SL_staff6 小时前
制造业订单交付总在最后一刻爆雷?用结构化计划模板打通跨系统协同断点
java·开源·全栈
做科研的周师兄6 小时前
【R语言实战】MixSIAR 氢氧同位素水源解析全流程:从混合空间校验到贝叶斯 MCMC 收敛诊断(后附完整代码)
java·大数据·开发语言
有点小困9776 小时前
Spring Boot 异步任务 ClassLoader 踩坑实录:ClassNotFoundException 的诡异真相
java
aiks_yuan6 小时前
Java 正则表达式很慢怎么办:Pattern 预编译只快 2~5 倍,真正卡死线程的是回溯(JDK 8、11、17 实测)
java
用户3721574261356 小时前
C# 填写 PDF 交互式表单:文本框、复选框、单选按钮和下拉列表
java
IT枫斗者枫哥6 小时前
Java 退款请求超时,先查原单还是重试?
java·后端
特立独行的猫A6 小时前
我用仓颉写了个多平台发文工具:一份 Markdown,一条命令发六个平台
java·后端·python