其他分享
首页 > 其他分享> > Maven 从入门到入土-Part2

Maven 从入门到入土-Part2

作者:互联网

文章目录


上篇我们聊了Maven是什么以及Maven是通过四个标签: groupIdartifactIdversionpackaging将自己标记为全球唯一的。接下来我们这篇文章将要聊一聊依赖管理!

依赖配置

依赖也是同样用一个标签来标记的,这个标签就是dependency,上文聊了使用groupIdartifactIdversion能够在中央仓库中确定唯一一个包,所以理所当然的就是在dependency中定义这三个标签来实现引入一个坐标,我们以springboot-web为例,如果想新入一个2.3.2版本的springboot-web就可以写成下面这样。

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <version>2.3.2.RELEASE</version>
</dependency>

非常简单,3行代码就代替了我们花十几分钟从互联网上下载jar包。那如果我想要引入很多依赖怎么办?当然是引入多个dependency!但是这里需要注意的是dependency需要用dependencies来包裹,告诉maven我这里面都是要引用的依赖,需要你去下载。

我们在上面的基础上再引入一个mysql的效果就是这样的:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.3.2.RELEASE</version>
	</dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
  </dependency>
</dependencies>

 maven有关于依赖部份最主要的配置方式都已经介绍完毕,不过还有一些非常重要的依赖标签需要我们去了解。

maven生命周期

在了解这些标签之前我们需要明确maven生命周期,maven的生命周期主要分为三个部分:clean、default和site。这三个周期包括了项目的清理、初始化、编译、测试、打包、集成测试、验证、部署、生成站点等几乎所有的构建步骤。

值得一提的是,maven的生命周期是非常灵活的,三个生命周期是相互独立的,我们可以单独执行生命周期的某一个阶段或者某一个阶段的某一个时刻。接下来我们就一点点介绍三个生命周期。

clean生命周期

clean生命周期主要是对项目进行一些清理,比如说清理上一次构建所产生的文件等等。clean生命周期一共包含三个阶段:pre-clean、clean、post-clean,不过一般我们就当作一个阶段来看。

default生命周期

default生命周期是maven最主要的一个生命周期,这里面几乎包含了构建的所有步骤。我们一个个来看【加粗的为重要步骤】:

site生命周期

site生命周期比较抽象的解释是说生产站点文档并发布,其实就是生成一个说明文档,这些文档可以被浏览器解释,现在基本没有人用。

依赖配置的其他标签

scope

scope选项就是控制依赖在生命周期中的表现,scope一共有以下几个选项。

当然scope也是可以随着依赖进行传递的,具体的表现如下:

规定:在A依赖于B,B依赖于C的情况下:

第一\传递\第二compiletestprovidedruntime
compilecompileruntime
testtesttest
providedprovidedprovidedprovided
runtimeruntimeruntime

classifier

classifier 可以是任意的字符串,这里主要是用于对一个jar包进行特殊的标记。比如说一个依赖是a-1.2.3-jdk8.jar的classifier就是jdk8a-1.2.3-jdk11.jar,他的classifier就是jdk11

optional

optional的值为true和false,当为true时代表这个依赖是可选的,如果需要使用这个依赖,则需要显示的引入此包。

还以数据库举例子,比如说我做了一个对各种数据库进行操作的依赖A,A里面自然就包含各种数据库的依赖,例如mysql、oracle、H2等等,我将这些依赖都设置为optional且为true,这样在打包的时候就不会将其打进我的依赖包中,这里的好处就是我打出来的jar包很小,同时也不会发生依赖冲突这种烦人的问题。当我在B项目中想通过依赖A来使用Mysql时,只需要显示的引入Mysql的依赖即可。

systemPath

这个选项很简单,如果使用的是我们自己开发的工具包,而且也没有上传到maven中央仓库中,这个时候如果想引用这个包就可以通过systemPath来指定依赖所在的路径。

不过需要注意的是,如果想使用systemPath必须要设置scope为system。

type

type也很简单,这里一般用于规定依赖的二进制类型,比如jar、war。这里默认是jar。

exclusions

这个标签主要用于排除依赖所依赖的依赖。比如我已经引入依赖1.1版本的A和1.2版本的依赖B,但是依赖A中引用了一个1.1版本的B与我的1.2版本有冲突,这个时候就可以使用exclusions在依赖A中将依赖B排除掉来解决冲突。

小结

最后我们通过一个具体的dependency来对所有的配置项进行归类,如下:

<dependency>
		<groupId>org.example.demo</groupId>
		<artifactId>MavenDemo</artifactId>
		<version>1.1.1-SNAPSHOT</version><!-- 版本号 -->
		<type>jar</type><!-- 依赖类型 -->
		<classifier></classifier><!-- 依赖的分类字符 -->
		<scope>test</scope><!-- 依赖范围:compile、provided、runtime、test、system、systemPath、optional -->
  	<optional>true</optional><!-- 可选依赖 -->
		<systemPath></systemPath><!-- 自定义依赖的绝对路径 -->
		<exclusions><!-- 需要排除的依赖 -->
			<exclusion>
				<artifactId>spring-core</artifactId>
				<groupId>org.springframework</groupId>
			</exclusion>
		</exclusions>
	</dependency>

以上就是本篇文章的全部内容,如果你觉得文章写得不错,求点赞,求转发。欢迎关注公众号(高压锅码农777)点击右下角联系作者,一起交流学习。

我是锅哥,祝你幸福,我们下期见。

标签:maven,依赖,clean,入土,Maven,Part2,生命周期,测试,test
来源: https://blog.csdn.net/weixin_44392716/article/details/122052715