maven相关

目录

1.标签

1.1dependencyManagement标签

1.2 dependencies标签

1.3 dependencyManagement和dependencies的区别

1.3.scope和type标签


1.标签


1.1dependencyManagement标签

简单的讲:该标签就是用于统一管理依赖。

这里有个比较特别的元素,即dependencyManagement元素。根据前面的简介可以知道它是依赖管理元素,也就是说,用来管理依赖的。因为在实际项目中它有特殊意义,而且能够被继承。
一个Maven项目要直接引用某个依赖,都是在dependencies中使用dependency描述要引用依赖的坐标信息来完成的。这样就达到了一个要什么,就直接写什么的效果,决定权都在是否用dependency指定了引用构件的坐标。但是在实际项目管理过程中可以有个全局的管理。也就是说,把整个项目要引用的依赖,事先分析整理好,形成一个全局的集合。当某个Maven模块需要具体引用某依赖的时候,直接在集合中指定若干个。这样就可以实现整个项目依赖的全局管理,不至于零碎地分布在每个Maven模块中。
基于这样的考虑,就可以在一个公共的pom.xml中使用dependencyManagement元素,将所有的依赖都声明管理好,如以下代码所示:
 

在项目中如果要使用前面在SpringPOM中用dependencyManagement管理的spring-core构件的话,只需继承SpringPOM,然后在用户自己的dependencies中指明spring-core就行,代码如下:

注意粗体部分,dependency中是没有指定version的,而且还不用配置scope,因为这些信息已经在SpringPOM中配置好了。这里只要通过groupId和artifactId指明是在dependencyManagement中配置的哪个,其他就自动明确了。虽然使用这种依赖管理机制不能减少太多的pom配置,不过还是建议用户使用这种方式。其原因是:在父pom中使用dependencyManagement声明依赖统一管理了项目中使用到的依赖种类、版本,每个子项目就不会出现额外的多余依赖,特别是没有优化的依赖和同一个构件的不同版本了。
 

1.2 dependencies标签

该标签中可以有多个<dependencie>标签,如下:

    <dependencies>
      <!-- spring boot -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>2.3.5.RELEASE</version>
      </dependency>
      <!-- spring-cloud-->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring-cloud.version}</version>
      </dependency>
    </dependencies>

每一个<dependencie>里面通过 gav这三个标签唯一确定一个依赖包。

1.3 dependencyManagement和dependencies的区别

区别1

<dependencyManagement>用于统一管理依赖,而不会直接下载依赖包,

在<dependencies>标签中的依赖会直接下载到本地。

简单一句话理解这两个标签的就是<dependencies>中的依赖maven会自动给我们下载,<dependencyManagement>中的依赖maven不会自动给我们下载。看图:

要想让maven给我们下载<dependencyManagement>中的依赖,怎么办。很简单,放在<dependencies>中就ok了:

如上图,fileupload包不用写版本号,因为已经通过dependencyManagement标签统一管理了。

区别2

如果在父类中定义了dependencies,子类继承的时候会自动产生依赖,

而dependencyManagement 中的东西就像是依赖的声明,子模块想要继承还需要在自己的pom文件中进行添加。

1.3.scope和type标签

使用<scope>import</scope>可以解决Maven项目单继承问题。

至于Maven项目继承问题,最好的例子的就是我们做springboot项目的时候的如下代码:

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>1.3.3.RELEASE</version>
</parent>

如上,只能有一个parent,也就是只能继承一个父类。

我们知道Maven的继承和Java的继承一样,只能单继承,无法实现多继承,你是否想过我们如果要继承多个父模块的时候应该怎么做呢?或许你会想只往一个父模块中添加jar包依赖,只继承一个父模块就可以了,但是这样的话所有的jar包都混合在一起了,jar包分类就不在清晰了,其实我们可以用另外一种方式实现多模块继承,这个方法就是使用<type>pom</type><scope>import</scope>,解释一下:type标签的默认值是jar,代表我们依赖导入的是一个jar包,现在我们设置成了pom,说明导入的是一个父模块,后面的scope标签中的值import代表把父模块中的jar包导入进来,不过需要注意的是<type>pom</type><scope>import</scope>,这种方式只能用在<dependencyManagement></dependencyManagement>中,那么再来一个例子吧,在SpringCloud项目中,我们导入SpringCloud依赖和SpringBoot依赖的代码如下:

<dependencyManagement>

	<dependencies>
		<!-- SpringCloud的jar包依赖 -->
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-dependencies</artifactId>
			<version>Dalston.SR1</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		<!-- SpringBoot的jar包依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-dependencies</artifactId>
			<version>1.5.9.RELEASE</version>
			<type>pom</type>
			<scope>import</scope>
		</dependency>
		</dependencies>
		
	</dependencyManagement>

上面的做法其实就相当于实现了多继承,毕竟我们导入了SpringCloud和SpringBoot的两个父模块的jar包依赖,而且还可以再写一个parent标签。

参考链接:



maven中dependencyManagement标签的简单使用(import scope依赖方式)_狂丰的博客-CSDN博客

​​​​​​Maven中pom文件内scope标签中import值的详解 - 之之小侠 - 博客园

使用<scope>import</scope>解决Maven项目单继承问题_明快de玄米61的博客-CSDN博客_import scope

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值