了解Java项目的管理工具——Maven

了解Java项目的管理工具——Maven

1、了解Maven

  在推行Maven项目之前,一个大型项目的开发往往会遇到的以下的问题:

  1. 项目在不同机器上无法正常运行
  2. 项目在不同机器上无法正常打包
  3. 项目编译环境配置繁琐,难以给新开发成员讲解配置细节
  4. 自己项目的jar包该存储在哪里
  5. 重用性高的jar包会造成内存占用
  6. jar包在修改了bug后需要进行重新发布

  为了解决上述的问题便推出了Maven项目,进行项目的统一管理。

1.1、Maven的介绍

  Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、报告和文档的项目管理软件。Maven除了程序构建能力出色之外,还提供高级项目管理工具,由于Maven的缺省构建有较强的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目。

1.2、Maven的功能

  Maven的主要功能有以下两点:

  1. 依赖管理:jar包管理
  2. 项目构建:代码编译

1.3、Maven依赖管理的原理

  Maven的依赖管理的原理涉及了三类存储jar包的仓库:

  • 本地仓库
  • 远程仓库
  • 中央仓库

  在一个项目中搜索jar包依赖时便是需要访问这三类仓库,访问的过程如下:

  1. 第一步:项目中pom.xml中添加依赖jar包,便会访问本地仓库寻找相应的依赖jar包,本地仓库中存在相应的jar包则直接返回项目,本地仓库中不存在相应的jar包,就会执行第二步。
  2. 第二步:如果在Maven中配置了远程仓库,则会访问远程仓库寻找相应的依赖jar包,远程仓库中存在jar包则先下载到本地仓库,最后再返回项目,远程仓库中不存在jar包,则会执行第三步;如果在Maven中没有配置远程仓库,那么就会执行第三步。
  3. 第三步:访问中央仓库,在中央仓库中如果存在相应的依赖jar包,则会把依赖jar包先下载到远程仓库(没有配置则无效),接着下载到本地仓库,最后再返回项目,如果在中央仓库中没有找到相应的依赖jar包则pom.xm文件中会报错。

  以下是图示:

在这里插入图片描述

2、Maven的安装与配置

2.1、Maven的安装

  进入Maven官网下载Maven软件包,官网链接:Maven下载官网,下载步骤如下:

在这里插入图片描述

  这个是3.8版本的Maven,如果想要下载其它版本的Maven,可以进行以下操作:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

 我演示的是3.6.3版本Maven的下载,其他版本的步骤也是一样的,根据自己的需要进行其他版本的下载。

  注意:在安装Maven之前,要先确认自己的电脑有没有安装和配置了JDK(最低版本1.8),没有则先进行JDK的安装和配置。Windows系统的JDK的安装和配置可以参考小编的这篇博客:“Java基础介绍”,macOS系统的JDK的安装和配置可以参考这位大佬的博文:“macOS下JDK11安装及环境变量配置总结”

2.2、Maven的配置

  下载好压缩包后将压缩包解压到任意文件夹中,注意解压路径不可以有中文。

在这里插入图片描述

  解压好以后,需要进环境变量的配置,需要进入高级系统设置中进行配置:此电脑右键 —> 属性 —> 高级系统设置 —> 环境变量 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20210411204945279.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZyaWVuZF9Y,size_16,color_FFFFFF,t_70)

  进入环境变量之后需要对两个变量进行配置:MAVEN_HOME和Path,如图所示:

  MAVEN_HOME变量配置图:

在这里插入图片描述

  Path变量配置图:

在这里插入图片描述

  配置好以后进行验证进入命令行窗口输入:mvn -version,得到以下结果便是成功,不成功则检查环境变量是否配置正确。成功示意图:

在这里插入图片描述

2.3、修改Maven的本地仓库

  Maven设置了自身的默认磁盘路径,我们可以通过修改setting.xml文件的内容来修改仓库路径。如图所示:

在这里插入图片描述

  加上以下自定义的本地仓库的磁盘路径,便可以完成更改本地仓库了。

<localRepository>
  E:\Maven3.6\repository <!--根据自己选择而定-->
</localRepository>

2.4、配置阿里云镜像仓库

  配置阿里云镜像仓库的目的是:远程下载jar包的速度更快,因为默认的远程下载地址访问的是国外的服务器,下载速度非常慢,所以需要配置国内的服务器:阿里云镜像仓库。配置阿里云镜像仓库也是需要修改setting.xml文件的内容。如图所示:

在这里插入图片描述

  加上以下阿里云镜像仓库的配置,便可以链接到阿里云镜像仓库了。

	<!--注意一定要放在:<mirrors></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的常用指令

3.1、mvn compile

  执行 mvn compile命令,完成编译操作。执行完毕后,会生成target目录,该目录中存放了编译后的字节码文件。

3.2、mvn clean

  执行 mvn clean命令,执行完毕后,会将target目录删除。

3.3、mvn test

  执行 mvn test命令,完成单元测试操作。执行完毕后,会在target目录中生成三个文件夹:surefire、 surefire-reports(测试报告)、test-classes(测试的字节码文件)

3.4、mvn package

  执行 mvn package命令,完成打包操作。执行完毕后,会在target目录中生成一个文件,该文件可能是jar、war。

3.5、mvn install

  执行 mvn install命令,完成将打好的jar包安装到本地仓库的操作执行完毕后,会在本地仓库中出现安装后的jar包,方便其他工程引用。

3.6、mvn clean compile

  组合指令,先执行clean,再执行compile,通常应用于上线前执行,清除测试类。

3.7、mvn clean test

  组合指令,先执行clean,再执行test,通常应用于测试环节。

3.8、mvn clean package

  组合指令,先执行clean,再执行package,将项目打包,通常应用于发布前。该组合命令的执行过程如下:

  • 清理————清空环境
  • 编译————编译源码
  • 测试————测试源码
  • 打包————将编译的非测试类打包

3.9、mvn clean install

  组合指令,先执行clean,再执行install,将项目打包,通常应用于发布前。该组合命令的执行过程如下:

  • 清理————清空环境
  • 编译————编译源码
  • 测试————测试源码
  • 打包————将编译的非测试类打包
  • 部署————将打好的包发布到资源仓库中

4 、Maven坐标的概念

  在Maven中坐标的作用是:确定唯一的jar包,便是pom.xml文件中需要书写的内容。Maven坐标的主要组成有三个部分:

  • groupId——定义当前的Maven组织的名称
  • artifactId——定义实际项目名称
  • version——定义当前项目的当前版本或者是所依赖的jar包的版本

  坐标在pom.xml中的编写格式如下:

<!--自己项目的坐标-->
<groupId>自己项目的Maven组织的名称(自定义)</groupId>
<artifactId>自己项目的实际项目名称(自定义)</artifactId>
<version>自己项目的当前项目的当前版本(默认:1.0-SNAPSHOT)</version>

5、Maven的依赖性和传递性

5.1、Maven的依赖性

  在添加jar包依赖时会涉及到依赖性的问题,以下是测试类的jar包添加的格式,可以看到多了一个scope标签,该标签内的内容便是jar包的依赖性。

<!--jar包依赖添加格式-->
<dependencies>
    <dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.11</version>
		<scope>test</scope>
    </dependency>
</dependencies>

  在scope标签内可以写入以下几种值:

  • compile
  • provided
  • runtime
  • test
  • system——一般不用,会有兼容性冲突

  compile表示的依赖范围是:编译范围,是默认的scope值,在工程环境的 classpath(编译环境)和打包(如果是WAR包,会包含在WAR包中)时候都有效。

  provided表示的依赖范围是:容器或JDK已提供范围,表示该依赖包已经由目标容器(如tomcat)和JDK提供,只在编译的classpath中加载和使用,打包的时候不会包含在目标包中 。最常见的是j2ee规范相关的servlet-api和jsp-api等jar包,一般由servlet容器提供,无需在打包到war包中,如果不配置为provided,把这些包打包到工程war包中,在tomcat6以上版本会出现冲突无法正常运行程序(版本不符的情况)。

  runtime表示的依赖范围是:一般是运行和测试环境使用,编译时候不用加入classpath,打包时候会打包到目标包中。一般是通过动态加载或接口反射加载的情况比较多。也就是说程序只使用了接口,具体的时候可能有多个,运行时通过配置文件或jar包扫描动态加载的情况。典型的包括:JDBC驱动等。

  test表示的依赖范围是:测试范围,一般是单元测试场景使用,在编译环境加入classpath,但打包时不会加入,如junit等。

  system表示的依赖范围是:系统范围,与provided类似,只是标记为该scope的依赖包需要明确指定基于文件系统的jar包路径。因为需要通过systemPath指定本地jar文件路径,所以该scope是不推荐的。如果是基于组织的,一般会建立本地镜像,会把本地的或组织的基础组件加入本地镜像管理,避过使用该scope的情况。

5.2、Maven的传递性

  在添加jar包依赖时会出现依赖传递的现象,这种传递现象分为两种情况:

  • 直接依赖
  • 间接依赖

  比如说:如果项目B中使用了A依赖,项目C中使用了B依赖,则称B是C的直接依赖,而称A是C的间接依赖。

5.3、Maven的依赖冲突

  依赖冲突分为两种:

  • 如果直接与间接依赖中包含有同一个坐标不同版本的资源依赖,以直接依赖的版本为准(就近原则)
  • 如果直接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序下方的版本为准(就近原则)

5.4、Maven的可选依赖

  当发生依赖冲突是可以进行可选依赖的配置,作用是:配置jar包的依赖是否向下传递,在依赖中添加optional选项决定此依赖是否向下传递,如果是true则不传递,如果是false就传递,默认为false。格式如下:

<dependencies>
    <dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		<version>4.11</version>
		<scope>test</scope>
		<optional>true</optional>
    </dependency>
</dependencies>

5.5、Maven的排除依赖

  maven 的传递依赖能自动将间接依赖引入项目中来,这样极大地简化了项目中的依赖管理,但是有时候间接依赖的关联包可能因为版本或其他原因,并不是我们想要的版本,可以进行排除依赖。实现排除依赖的方法便是在直接依赖的配置里面添加exclusions和exclusion 标签对,指定要排除依赖的 groupId 和 artifactId 就行。注意:排除依赖包中所包含的依赖关系,不需要添加版本号。如下面代码所示。

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.11</version>
	<scope>test</scope>
	<exclusions>
		<exclusion>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest-core</artifactId>
		</exclusion>
	</exclusions>
</dependency>

  

6、IDEA中搭建Maven项目

6.1、更改IDEA中的Maven版本

  在使用IDEA编写Maven项目时,需要先更改IDEA中的Maven版本,因为IDEA会有默认版本的Maven,需要更改成自己本地的Maven。更改的步骤如图所示:

在这里插入图片描述

  上面是进入了IDEA工程界面的操作,如果是在IDEA的欢迎界面的步骤如下:

在这里插入图片描述

在这里插入图片描述

6.2、搭建JavaSE类型的Maven项目

  搭建JavaSE类型的Maven项目步骤如图所示:

在这里插入图片描述
在这里插入图片描述

  或者是:

在这里插入图片描述

在这里插入图片描述

  最后创建好的工程示意图如下:

在这里插入图片描述

6.3、搭建JavaWeb类型的Maven项目

  在进行项目搭建之前需要进行runner相关的配置,配置步骤如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  VM Options的内容如下:

-DarchetypeCatalog=internal

  配置好runner之后,便可以进行搭建JavaWeb类型的Maven项目,搭建的步骤图如下:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  最后创建好的工程示意图如下:

在这里插入图片描述

  关于Maven的相关知识就介绍到这了,希望文章可以帮到你们,谢谢阅读。如果觉得文章写得不错,可以关注小编,我将会不定期更新关于Java方面的博文。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值