Maven知识总结



1.Maven基础

1.1 Maven是什么

  maven 是一个项目管理工具,主要作用是在项目开发阶段对Java项目进行依赖管理和项目构建

  • 依赖管理:就是对jar包的管理。通过导入maven坐标,就相当于将仓库中的jar包导入了当前项目中。
  • 项目构建:通过maven的一个命令就可以完成项目从清理、编译、测试、报告、打包,部署整个过程。

在这里插入图片描述

1.2 maven的仓库类型

  1. 本地仓库
  2. 远程仓库
    • maven中央仓库(地址:http://repo2.maven.org/maven2/)
    • maven私服(公司局域网内的仓库,需要自己搭建)
    • 其他公共远程仓库(例如apache提供的远程仓库,地址:http://repo.maven.apache.org/maven2/)

1.3 maven常用命令

  • clean: 清理
  • compile:编译
  • test: 测试
  • package:打包
  • install: 安装

1.4 maven坐标书写规范

在这里插入图片描述

1.5 maven的依赖范围

在这里插入图片描述


2 maven的依赖传递

2.1 什么是依赖传递

  在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。假设C依赖B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A。
在这里插入图片描述

在这里插入图片描述
  通过上面的图可以看到,我们的web项目直接依赖了spring-webmvc,而spring-webmvc依赖了sping-aop、spring-beans等。最终的结果就是在我们的web项目中间接依赖了spring-aop、spring-beans等。

2.2 什么是依赖冲突

  由于依赖传递现象的存在, spring-webmvc 依赖 spirng-beans-4.2.4,spring-aop 依赖 spring-beans-5.0.2,但是发现 spirng-beans-4.2.4 和spring-beans-5.0.2都加入到了工程中,这时系统可能默认使用spirng-beans-4.2.4, 而我们希望使用spring-beans-5.0.2 。这就造成了依赖冲突。并且我们希望只把spring-beans-5.0.2加入工程。

2.3 如何解决依赖冲突

  1. 使用maven提供的依赖调解原则
    第一声明者优先原则
    路径近者优先原则
  2. 排除依赖
  3. 锁定版本(最常用)

2.3.1 使用maven提供的依赖调解原则

第一声明者优先原则:
  在 pom 文件中定义依赖,以先声明的依赖为准。其实就是根据坐标导入的顺序来确定最终使用哪个传递过来的依赖。即把想要的坐标写在前面即可。

路径近者优先原则:
  在 pom 文件定义依赖,以路径近者为准。还是上述情况,spring-aop 和 spring-webmvc 都会传递过来 spirng-beans,那如果直接把 spring-beans 的依赖直接写到 pom 文件中,那么项目就不会再使用其他依赖传递来的spring-beans,因为自己直接在 pom 中定义spring-beans要比其他依赖传递过来的路径要近。

2.3.2 排除依赖

可以使用exclusions标签将传递过来的依赖排除出去。
在这里插入图片描述
在这里插入图片描述
通过上图可以看到,spring-webmvc传递过来的4.2.4版本的springbeans已经被排除出去了,项目中使用的为spring-aop传递过来的5.0.2版本的spring-beans

2.3.3 版本锁定

  采用直接锁定版本的方法确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,以锁定的版本为准添加到工程中,此方法在企业开发中经常使用。

版本锁定的使用方式:

  • 第一步:在dependencyManagement标签中锁定依赖的版本
    在这里插入图片描述

注意:pom文件中使用dependencyManagement标签进行依赖jar的版本锁定,并不会真正将jar包导入到项目中,只是对这些jar的版本进行锁定。项目中使用哪些jar包,还需要在dependencies标签中进行声明。

  • 第二步:在dependencies标签中声明需要导入的maven坐标
    在这里插入图片描述


3 分模块构建maven工程

  在企业项目开发过程中,由于项目规模庞大,业务复杂,参与的人员比较多,一般会通过合理的模块拆分将一个大型的项目拆分为N多个小模块,分别进行开发。而且拆分出的模块可以非常容易的被其他模块复用。

常见的拆分方式有两种:

  • 第一种:按照业务模块进行拆分,每个模块拆分成一个maven工程,例如将一个项目分为用户模块、订单模块、购物车模块等,每个模块对应就是一个maven工程(比如:IDEA中的一个Module)

  • 第二种:按照层进行拆分,例持久层、业务层、表现层等,每个层对应就是一个maven工程(比如:IDEA中的一个Module)

  不管是上面哪种拆分方式,通常都会提供一个父工程,将一些公共的代码和配置提取到父工程中进行统一管理和配置。

在这里插入图片描述

3.1 maven工程的继承

  在Java语言中,类之间是可以继承的,通过继承,子类就可以引用父类中非private的属性和方法。同样,在maven工程之间也可以继承,子工程继承父工程后,就可以使用在父工程中引入的依赖。继承的目的是为了消除重复代码。

在这里插入图片描述

  被继承的maven工程通常称为父工程,父工程的打包方式必须为pom,所以我们区分某个maven工程是否为父工程就看这个工程的打包方式是否为pom

  继承其他maven父工程的工程通常称为子工程,在pom.xml文件中通过parent标签进行父工程的继承

3.2 maven工程的聚合

  在maven工程的pom.xml文件中可以使用标签将其他maven工程聚合到一起,聚合的目的是为了进行统一操作
  例如拆分后的maven工程有多个,如果要进行打包,就需要针对每个工程分别执行打包命令,操作起来非常繁琐。这时就可以使用标签将这些工程统一聚合到maven工程中,需要打包的时候,只需要在此工程中执行一次打包命令,其下被聚合的工程就都会被打包了。

  需要注意的是:继承与聚合没有必然的关系,即使两个模块之间没有继承关系也是可以聚合的。

在这里插入图片描述



4 maven私服

4.1 maven私服介绍

  maven仓库分为本地仓库和远程仓库,而远程仓库又分为maven中央仓库、其他远程仓库和私服(私有服务器)。其中,中央仓库是由maven官方提供的,而私服就需要我们自己搭建了。

  maven私服就是公司局域网内的maven远程仓库,每个员工的电脑上安装maven软件并且连接maven私服,程序员可以将自己开发的项目打成jar并发布到私服,其它项目组成员就可以从私服下载所依赖的jar。私服还充当一个代理服务器的角色,当私服上没有jar包时会从maven中央仓库自动下载。

  nexus 是一个maven仓库管理器(其实就是一个软件),nexus可以充当maven私服,同时nexus还提供强大的仓库管理、构件搜索等功能。

4.2 搭建maven私服

下载地址url:
https://help.sonatype.com/repomanager2/download/download-archives—repository-manager-oss

连接:下载地址

安装步骤:

  1. 将下载的压缩包进行解压,进入bin目录
  2. 打开cmd窗口并进入上面bin目录下,执行nexus.bat install命令安装服务(注意需要以管理员身份运行cmd命令)
    在这里插入图片描述
  3. 启动nexus,在命令行执行nexus.bat start命令启动nexus
    在这里插入图片描述
  4. 访问nexus
    • 启动nexus服务后,访问http://localhost:8081/nexus
    • 点击右上角LogIn按钮,进行登录。使用默认用户名admin和密码admin123登录系统
    • 登录成功后点击左侧菜单Repositories可以看到nexus内置的仓库列表

nexus仓库类型:

  通过前面的仓库列表可以看到,nexus默认内置了很多仓库,这些仓库可以划分为4种类型,每种类型的仓库用于存放特定的jar包,具体说明如下:

  1. hosted,宿主仓库,部署自己的jar到这个类型的仓库,包括Releases和Snapshots两部分,Releases为公司内部发布版本仓库、 Snapshots为公司内部测试版本仓库。
  2. proxy,代理仓库,用于代理远程的公共仓库,如maven中央仓库,用户连接私服,私服自动去中央仓库下载jar包或者插件。
  3. group,仓库组,用来合并多个hosted/proxy仓库,通常我们配置自己的maven连接仓库组。
  4. virtual(虚拟):兼容Maven1版本的jar或者插件

在这里插入图片描述

4.3 将项目发布到maven私服

  maven私服是搭建在公司局域网内的maven仓库,公司内的所有开发团队都可以使用。例如技术研发团队开发了一个基础组件,就可以将这个基础组件打成jar包发布到私服,其他团队成员就可以从私服下载这个jar包到本地仓库并在项目中使用。

将项目发布到maven私服操作步骤如下:

  1. 配置maven的settings.xml文件
<server>
	<id>releases</id>
	<username>admin</username>
	<password>admin123</password>
</server>
<server>
	<id>snapshots</id>
	<username>admin</username>
	<password>admin123</password>
</server>

注意:一定要在idea工具中引入的maven的settings.xml文件中配置
2. 配置项目的pom.xml文件

<distributionManagement>
	<repository>
		<id>releases</id>
		<url>http://localhost:8081/nexus/content/repositories/releases/</url>
	</repository>
	
	<snapshotRepository>
		<id>snapshots</id>
		<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
	</snapshotRepository>
</distributionManagement>

注意:pom.xml文件的的值和前面配置的settings.xml 文件的值需要一致
3. 执行mvn deploy命令
在这里插入图片描述

4.4 从私服下载jar到本地仓库

具体操作步骤如下:

  1. 在maven的settings.xml文件中配置下载模板

在这里插入图片描述

  1. 在maven的settings.xml文件中配置激活下载模板
<activeProfiles>
	<activeProfile>dev</activeProfile>
</activeProfiles>

4.5 将第三方jar安装到本地仓库和maven私服

  在maven工程的pom.xml文件中配置某个jar包的坐标后,如果本地的maven仓库不存在这个jar包,maven工具会自动到配置的maven私服下载,如果私服中也不存在,maven私服就会从maven中央仓库进行下载。

  但是并不是所有的jar包都可以从中央仓库下载到,比如常用的Oracle数据库驱动的jar包在中央仓库就不存在。此时需要到Oracle的官网下载驱动jar包,然后将此jar包通过maven命令安装到我们本地的maven仓库或者maven私服中,这样在maven项目中就可以使用maven坐标引用到此jar包了。

4.5.1 将第三方jar安装到本地仓库

  1. 下载Oracle的jar包(略)
  2. mvn install命令进行安装
mvn install:install-file -Dfile=ojdbc14-10.2.0.4.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 –Dversion=10.2.0.4.0 -Dpackaging=jar
  1. 查看本地maven仓库,确认安装是否成功

4.5.2 将第三方jar安装到maven私服

  1. 下载Oracle的jar包(略)
  2. 在maven的settings.xml配置文件中配置第三方仓库的server信息
<server>
	<id>thirdparty</id>
	<username>admin</username>
	<password>admin123</password>
</server>
  1. 执行mvn deploy命令进行安装
mvn deploy:deploy-file -Dfile=ojdbc14-10.2.0.4.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 –
Dversion=10.2.0.4.0 -Dpackaging=jar –
Durl=http://localhost:8081/nexus/content/repositories/thirdparty/ -DrepositoryId=thirdparty
©️2020 CSDN 皮肤主题: 点我我会动 设计师:上身试试 返回首页