文章目录
- 1.Maven
- 1.1什么是Maven
- 1.2Maven的好处
- 1.3使用idea创建一个Maven项目
- 1.4Maven的核心功能
- 1.4.1项目构建
- 1.5Maven仓库
- 1.5.2 中央仓库
- 1.5.3 私有服务器(私服)
- 1.6Maven设置国内源
1.Maven
1.1什么是Maven
官方对于Maven的描述:
Apache Maven is a software project management and comprehension tool.
Based on theconcept of a project object model (POM), Maven can manage
a project’s build, reporting anddocumentation from a central piece
ofinformation.
即Maven是一个项目管理工具。基于POM(project Object
Model,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具
也就是说,Maven就是一个项目管理工具,通过pow.xml文件的配置获取jar包,而不是之前的手动添加jar包
1.2Maven的好处
就是为了简单,方便,提高开发效率,减少开发bug
1.3使用idea创建一个Maven项目
1.4Maven的核心功能
主要体现在两个方面
1.4.1项目构建
Maven为我们提供了一套简单命令来完成项目的构建
就比如常见的打jar包操作,点击package就能完成项目的打包操作
1.4.2 依赖管理
依赖配置
使用Maven后,我我们不再手动添加jar包,而是通过pom.xml文件的配置获取jar包,这里的jar包实际上就是依赖
就比如使用javaFx,我们需要手动将javaFX的包下载下来,添加到项目里面
但是如果使用Maven,我们只需要在pom.xml中引入javaFx的依赖即可
<dependencies><!--里面添加项目的依赖坐标,可以是多个--></dependencies>
如果要添加javaFx依赖,那就是
<dependencies><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-graphics --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-graphics</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-base --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-base</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-fxml</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-swing --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-swing</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-web --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-web</artifactId><version>17.0.11</version></dependency><!-- https://mvnrepository.com/artifact/org.openjfx/javafx-media --><dependency><groupId>org.openjfx</groupId><artifactId>javafx-media</artifactId><version>17.0.11</version></dependency>
</dependencies>
注意:对pow文件的任意改动都要点击刷新按钮,特别是引入新的jar包
此时就能看到新加入的jar包
依赖传递
在导入某些jar包的时候,可能某些jar包同时也引用了其他的jar包,那么就需要将所有的jar包都复制到项目底下
如果我们不使用Maven,那么就需要知道每个库都依赖哪些库,以及这些库之间的关系是什么样的,就比较复杂
但是如果使用Maven,就可以避免管理依赖之间的关系,只需要在pom文件中直接定义依赖即可,由于maven的依赖具有传递性,就会自动将这个依赖所依赖的其他jar包一起导入
如图所示,项目A通过Maven引入jarA时,就会自动引入jarB和jarC
此时jarA和项目B就是项目A的直接依赖
jarB和jarC是间接依赖
依赖排除
如上图所示,如果项目A不需要jarB,也可以通过排除依赖的方式来实现
排除依赖即主动断开依赖(被排除的资源无需指定版本)
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>6.0.6</version><!--排除依赖--><exclusions><exclusion><artifactId>spring-jcl</artifactId><groupId>org.springframework</groupId></exclusion></exclusions></dependency>
</dependencies>
我们也可以通过插件更方便的解决这类问题
在这个页面就可以直接排除依赖
依赖调解
当项⽬中的依赖存在依赖冲突时
Maven会采⽤最短路径优先的原则去选择依赖
1.5Maven仓库
前面讲过,使用maven,我们只需要在pom文件里面,通过短短几行代码就能将依赖的jar包导进项目里面,那么是怎么做到的呢?
<dependency><groupId>org.openjfx</groupId><artifactId>javafx-controls</artifactId><version>17.0.11</version></dependency>
这几行代码就称为"坐标",是唯一的
实际上在Maven里,就是通过groupId,artifactId,version的配置,来唯一识别一个jar包,这三者缺一不可
当我们在pom⽂件中配置完依赖之后, 点击刷新, Maven会根据坐标的配置, 去仓库⾥寻找Jar包, 并把他 下载下来, 添加到项⽬中. 这个Jar包下载的地⽅就称为仓库.
Maven仓库分为两大类:本地仓库和远程仓库
1.5.1 本地仓库
是自己计算机上对应的一个目录,首先会查找本地仓库里面是否有对应的jar包
当项目中引入对应的依赖之后,首先会查找本地仓库里面是否有让对应的jar包
如果有的话就直接引用,没有的话则去中央仓库下载对应的jar包到本地仓库
本地仓库地址可以通过Maven配置查看
1.5.2 中央仓库
中央仓库: maven 软件中内置⼀个远程仓库地址,就是中央仓库,服务于整个互联⽹. 由 Maven 团队 维护,全球唯⼀.
仓库地址:https://repo1.maven.org/maven2
可以通过https://mvnrepository.com 这个⽹站来查询并下载
1.5.3 私有服务器(私服)
私服: ⼀般由公司团队搭建的私有仓库.
私服属于某个公司,或者某个部⻔, 往往需要⼀定权限.
有了私服之后, Maven依赖下载的顺序就发生了变化
(1)先从本地仓库获取, 本地仓库存在, 则直接返回
(2) 如果本地仓库没有, 就从私服请求, 私服存在该资源, 就直接返回
(3) 如果私服上不存在该资源,则从中央仓库下载, 中央仓库不存在, 就报错了
(4) 如果中央仓库中存在, 就先缓存在私服上之后,再缓存到本地仓库⾥, 再为Maven的下载请求提供服务
1.6Maven设置国内源
因为中央仓库在国外,因此访问下载起来会比较慢,因此我们设置国内源
修改Maven的配置文件在本文资源直接下载即可
将此文件覆盖在此路径