Maven基础

本文详细介绍了Maven的基础知识,包括仓库种类及其关系、常用命令、解决jar包冲突的方法,强调了统一和锁定jar包版本的重要性。通过理解第一声明优先和路径近者优先原则,以及直接排除法,可以更有效地管理项目依赖。
摘要由CSDN通过智能技术生成
Mac下的Maven配置安装,可以查看另一篇博客:传送门

目录

一、简述

maven是一个项目管理工具。

maven拆分思想:
maven解决代码可重用和便于维护问题上的解决方案:
maven把一个完成的项目,分成不同的独立模块,这些模块都有各自独立的坐标。哪个地方需要其中某个模块,就直接引用该模块的坐标即可。实际开发中,先考虑的问题不是dao、service、utils、domain如何编写,我们要考虑的是dao、service、utils、domain是否已经存在,如果存在直接引用。
maven聚合思想:可以把拆分独立的各个模块聚合到一起编写成一个完成的项目。

依赖管理:maven对项目中jar包的管理过程。pom文件管理jar包坐标。

  • 传统项目直接把jar包放置在项目中。
  • maven工程真正的jar包放置在仓库中,项目中只需要放置jar包的坐标。-- 当项目编译或运行时,项目会自动通过jar包坐标在仓库中找到所对应的jar包。

二、仓库

2.1 仓库种类

  • 本地仓库:只能通过安装的方式将jar包安装到本地仓库。拷贝到本地仓库的jar包是没有效果的。
  • 远程仓库【也称之为私服】-- 放置了公司内部开发所需要的jar包。若公司没有网络时,本地仓库没有jar包,我们可以通过局域网从远程下载jar包。
  • 中央仓库 – 安装了maven之后,自动就连着中央仓库,需要电脑连接着网络,才可以在中央仓库下载jar包。

2.2 仓库之间的关系

当我们启动一个maven工程的时候,maven工程通过pom文件中jar包的坐标去本地仓库找对应jar包。
默认情况下,如果本地仓库没有对应jar包,maven工程会自动去中央仓库下载jar包到本地仓库。
在公司中,如果本地没有对应jar包,会先从私服下载jar包。
如果私服也没有jar包,可以从中央仓库下载,也可以从本地上传。

三、常用命令

maven一键构建:maven自身集成了tomcat插件,可以对项目进行编译、测试、打包、安装、发布等操作。

maven常用命令:

  • clean 清理项目以前的构建信息
  • compile 对src/main/java 下的目录进行编译。
  • test 编译测试代码
  • package 把本地项目打包到了本地编译目录 target
  • install 把包安装到本地仓库
  • deploy 将本地做好的项目直接上传到私服

maven以上命令涉及了三套生命周期:

  • 清理生命周期
  • 默认生命周期
  • 站点生命周期

四、解决jar包冲突

maven工程要导入jar包坐标,就必须要考虑解决jar包冲突,解决jar包冲突的方式有如下三种:

4.1 第一声明优先原则

第一声明优先原则:哪个jar包的坐标在pom靠上的位置,这个jar包就是先声明的。
先声明的jar包坐标下的依赖包,可以优先进入项目中。

比如:
A 导入方式

<dependencies>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.0.2.RELEASE</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-beans</artifactId>
     <version>4.1.2.RELEASE</version>
   </dependency>
 </dependencies>

B 导入方式:

<dependencies>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-beans</artifactId>
     <version>4.1.2.RELEASE</version>
   </dependency>
 </dependencies>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.0.2.RELEASE</version>
   </dependency>

我们知道spring-beans的jar包依赖spring-core。此时spring-beans坐标位置会影响到spring-core的jar包的版本。
根据第一声明优先原则:
A导入jar包分别为:
spring-core版本5.0.2.RELEASE,spring-beans版本4.1.2.RELEASE

B导入jar包分别为:
spring-core版本4.1.2.RELEASE,spring-beans版本4.1.2.RELEASE

4.2 路径近者优先原则

首先,我们需要明确maven导入jar包中两个概念:
直接依赖:项目中直接导入的jar包,就是直接该项目的直接依赖包。
传递依赖:项目中没有直接导入的jar包,可以通过项目直接依赖jar包传递到项目中。

路径近者优先原则:直接依赖路径比传递依赖路径近,那么最终项目进入的jar包是路径近的直接依赖包。

<dependencies>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-beans</artifactId>
     <version>4.1.2.RELEASE</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.0.2.RELEASE</version>
   </dependency>
   <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-core</artifactId>
     <version>4.2.8.RELEASE</version>
   </dependency>
 </dependencies>

此时,项目对spring-core是直接依赖。此时项目引入的jar包为:
spring-core版本4.2.8.RELEASE

4.3 直接排除法【推荐使用】

当我们要排除某个jar包下依赖,当配置exclusions标签的时候,内部可以不写版本号。
因为此时依赖包使用的版本号默认与本jar包一样。

该方式优于方式一、方式二。因为在多人开发时,此种方式可以避免其他人员移动jar包坐标带来的jar包版本问题。

<dependencies>
  <dependency>
    <groupId>org.springframework</groupId
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值