Maven--使用import scope解决maven继承(单)问题

news/2025/3/14 8:34:51

测试环境 maven 3.3.9

想必大家在做SpringBoot应用的时候,都会有如下代码:

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

继承一个父模块,然后再引入相应的依赖

假如说,我不想继承,或者我想继承多个,怎么做?

我们知道Maven的继承和Java的继承一样,是无法实现多重继承的,如果10个、20个甚至更多模块继承自同一个模块,那么按照我们之前的做法,这个父模块的dependencyManagement会包含大量的依赖。如果你想把这些依赖分类以更清晰的管理,那就不可能了,import scope依赖能解决这个问题。你可以把dependencyManagement放到单独的专门用来管理依赖的pom中,然后在需要使用依赖的模块中通过import scope依赖,就可以引入dependencyManagement。例如可以写这样一个用于依赖管理的pom:

<project>  <modelVersion>4.0.0</modelVersion>  <groupId>com.test.sample</groupId>  <artifactId>base-parent1</artifactId>  <packaging>pom</packaging>  <version>1.0.0-SNAPSHOT</version>  <dependencyManagement>  <dependencies>  <dependency>  <groupId>junit</groupId>  <artifactid>junit</artifactId>  <version>4.8.2</version>  </dependency>  <dependency>  <groupId>log4j</groupId>  <artifactid>log4j</artifactId>  <version>1.2.16</version>  </dependency>  </dependencies>  </dependencyManagement>  
</project>

然后我就可以通过非继承的方式来引入这段依赖管理配置

<dependencyManagement>  <dependencies>  <dependency>  <groupId>com.test.sample</groupId>  <artifactid>base-parent1</artifactId>  <version>1.0.0-SNAPSHOT</version>  <type>pom</type>  <scope>import</scope>  </dependency>  </dependencies>  
</dependencyManagement>  <dependency>  <groupId>junit</groupId>  <artifactid>junit</artifactId>  
</dependency>  
<dependency>  <groupId>log4j</groupId>  <artifactid>log4j</artifactId>  
</dependency>  

注意:import scope只能用在dependencyManagement里面

这样,父模块的pom就会非常干净,由专门的packaging为pom来管理依赖,也契合的面向对象设计中的单一职责原则。此外,我们还能够创建多个这样的依赖管理pom,以更细化的方式管理依赖。这种做法与面向对象设计中使用组合而非继承也有点相似的味道。

那么,如何用这个方法来解决SpringBoot的那个继承问题呢?

配置如下:

<dependencyManagement>  <dependencies>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-dependencies</artifactId>  <version>1.3.3.RELEASE</version>  <type>pom</type>  <scope>import</scope>  </dependency>  </dependencies>  
</dependencyManagement>  <dependencies>  <dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId>  </dependency>  
</dependencies>  

这样配置的话,自己的项目里面就不需要继承SpringBoot的module了,而可以继承自己项目的module了。

原文地址:https://blog.csdn.net/mn960mn/article/details/50894022

文章来源:https://blog.csdn.net/u012834750/article/details/79704273
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-4234365.html

相关文章

SpringCloud--构建Eureka注册发现中心

一、Eureka简介 Eureka是Netflix开源的服务发现组件&#xff0c;本身是一个基于REST的服务。它包含Server和Client两部分。SpringCloud将它集成在子项目SpringCloud Netflix中&#xff0c;从而实现微服务的注册与发现。 二、EureKa原理 Eureka包含两个组件&#xff1a;Eureka …

基于Redis实现简单的分布式锁

2019独角兽企业重金招聘Python工程师标准>>> 分布式锁要点 不同的节点访问到的应该是同一把锁。锁的基本特新不变&#xff0c;需要有加锁和释放两大操作。一个最重要的&#xff0c;不像JVM的锁&#xff0c;在单机上&#xff0c;可以使用try-catch-finally来进行锁的…

SpringBoot线上部署踩坑

SpringBOOT项目在线上部署时&#xff0c;要么在命令行里添加–spring.profiles.activeprod来指定环境&#xff0c;要么通过maven 打包时动态传参激活–spring.profiles.activeprod,之前对于SpringBOOT的项目部署都是采用命令行方式激活环境分支&#xff0c;现项目集成部署环境&…

MySQL基操---深入浅出增量断点备份与日志管理

-----------------------------日志-----------------------------------MySQL的日志类型有以下几种&#xff1a;1. 错误日志&#xff08;error&#xff09;,MySQL服务实例启动、运行或者停止等相关信息。 2. 普通查询日志&#xff08;general&#xff09;,MySQL服务实例运行…

第三章_Redis的十大数据类型

which 10 官网&#xff1a;https://redis.io/docs/data-types/ 一图说明 提前声明 这里说的数据类型是value的数据类型&#xff0c;key的类型都是字符串 十大数据类型分别是 redis字符串&#xff08;String&#xff09; String&#xff08;字符串&#xff09;。 string是…

Docker系列(四)Docker 网络模式及配置

四种网络模式摘自 Docker 网络详解及 pipework 源码解读与实践 一、Docker网络模式 docker run 创建 Docker 容器时&#xff0c;可以用 –net 选项指定容器的网络模式&#xff0c;Docker 有以下 4 种网络模式&#xff1a; host 模式&#xff0c;使用 –nethost 指定。contai…

笔试题之Java基础部分【简】【一】

2019独角兽企业重金招聘Python工程师标准>>> 1.length、length()和size() length针对数组&#xff0c;数组的长度用length length()针对字符串String&#xff0c;字符串的长度用length() size()针对泛型集合&#xff0c;有多少元素用size()2.jdk中哪些类是不能继承的…

Hadoop 多次namenode -format造成datanode进程异常

之前在启动hadoop集群时&#xff0c;使用jps命令没有查看到datanode&#xff0c;但第一次启动集群时有datanode&#xff0c;查看datanode的相关日志&#xff0c;报Java IO异常“java.io.IOException”&#xff0c;异常信息里显示的是&#xff0c;namenode和datanode的clusterID…

Spark系列--SparkCore(六)RDD分区详解

转载自&#xff1a;https://blog.csdn.net/jiangsanfeng1111/article/details/78191891 一、分区个数规则 spark.default.parallelism&#xff1a;&#xff08;默认的并发数&#xff09; 2 当配置文件spark-default.conf中没有显示的配置&#xff0c;则按照如下规则取值&…

DotNetty网络通信框架学习之初识Netty

DotNetty网络通信框架学习之初识Netty 由于工作的需要最近又在探索网络通讯的框架&#xff0c;之前探究过开源的supersoket通讯框架&#xff0c;在实际的使用过程中也很相当的顺手和高效。详细的supersocket基础使用可移至本人的博客&#xff1a;supersocke基础。最近又看到网上…