10maven依赖继承、统一版本/编码
A > B > C
A依赖于B,B依赖于C,如果A想间接依赖C,那么B和C之间的依赖范围必须是compile,不然A依赖不了C
但是有点麻烦,因为每次A想依赖于C都要确认B和C之间的依赖范围是否是compile,否则A依赖不了C,每次确认都会费时间
而且有些依赖的默认范围不是compile,如果修改默认的依赖范围可能导致冲突,比如servlet-api.jar的默认依赖范围是provided,如果修改servlet的默认依赖范围为compile,那么间接依赖serlvet的项目在运行时会报空指针异常,因为项目是在tomcat里面运行的,但是tomcat自带了servlet-api.jar,那就会冲突。
有一种方法,只要B依赖于C,不管依赖范围是否为compile,A都能间接依赖于C,这种方法就是 依赖继承。
依赖继承:
依赖继承后,A可以使用B的所有依赖
想要实现依赖继承有三个步骤
1、确保被继承的父工程打包方式为pom,并且要在父工程的pom.xml文件中配置依赖
2、在子工程里面配置父工程的坐标,建立继承关系
3、在子工程的pom.xml里面声明要使用到父工程里面的哪些依赖
maven打包方式:
java工程——jar
web项目-war
父工程-pom
例子:
首先创建父工程,保证打包方式为pom



然后创建子工程,子工程打包类型没有限制,
然后在子工程pom.xml里面配置依赖

你一定有点疑问,直接在本项目中配置依赖就可以导入相关Jar包,为什么还要弄继承这么复杂呢,原因有两个
第一:配置依赖每次都要去远程仓库下载jar包,下载jar包即浪费时间又占用空间
第二:继承就可以直接调用原来的jar包,即不用重新下载,又不会新占用空间

如果你不确定是否又继承到父工程的依赖可以在下图查看依赖

统一项目的jdk:
build path:删除旧版本,增加新版本
右键项目-属性-Project Factors -java version 改版本 (之前存在要改的版本)
通过maven统一jdk版本:
<profiles>
<profile>
<id>jdk-12</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>12</jdk>
</activation>
<properties>
<maven.compiler.source>12</maven.compiler.source>
<maven.compiler.target>12</maven.compiler.target>
<maven.compiler.compilerVersion>12</maven.compiler.compilerVersion>
</properties>
</profile>
</profiles>
通过maven统一编码:
<properties>
<!-- 文件拷贝时的编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<!-- 编译时的编码 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
</properties>
不过有时候需要更改依赖的版本号,这需要在pom文件里面找很久,还有就是一个一个的改很麻烦,有种便利的方法:

还可以结合依赖继承统一版本/编码,更加实用

父工程(pom打包类型)可以充当一个类似本地仓库,即可以利用继承实现空间资源节约,也可以统一版本/编码,还可以聚合项目
不过有个缺点,就是增加了项目之间的耦合度,如果有多个项目同时继承一个父工程,如果在父工程修改版本号,其他子工程也会跟着改变
比如A工程和B工程一开始是使用相同版本的junit的jar包,所以建立了一个父工程同时继承,但是需求发生改变,A工程需要使用3.8的junit,但B工程需要使用4.0的junit,这样只能让其中一个项目不继承,自己另外配置依赖,所以如果保证项目使用的依赖版本不会发生改变,还是建议用父工程的。
有什么疑问或建议欢迎在评论区发表。
10maven依赖继承、统一版本/编码的更多相关文章
- (30)导入时如何定制spring-boot依赖项的版本【转载】【从零开始学Spring Boot】
此文章转载地址:http://www.tuicool.com/articles/RJJvMj3 请注重作者的版权. spring-boot通过maven的依赖管理为我们写好了很多依赖项及其版本,我们可 ...
- 导入时如何定制spring-boot依赖项的版本
spring-boot通过maven的依赖管理为我们写好了很多依赖项及其版本,我们可拿来使用.spring-boot文档介绍了两种使用方法,一是继承,二是导入. 通过<parent>继承: ...
- MySQL的搜索引擎,统一字符编码 和忘记MySQL密码如何破解
忘记mysql密码 linux平台下,破解密码的两种方式 [root@egon ~]# rm -rf /var/lib/mysql/mysql #所有授权信息全部丢失!!! [root@egon ~] ...
- maven 检查依赖冲突和版本冲突
maven 检查依赖冲突和版本冲突 在项目发布的时候,一般都需要进行依赖冲突检查或者重复类的检查,这个时候我一般会使用下面的两个命令: 1 2 3 mvn -U clean package - ...
- 快速创建SpringBoot2.x应用之工具类自动创建web应用、SpringBoot2.x的依赖默认Maven版本
快速创建SpringBoot2.x应用之工具类自动创建web应用简介:使用构建工具自动生成项目基本架构 1.工具自动创建:http://start.spring.io/ 2.访问地址:http://l ...
- Gradle依赖的统一管理,解决依赖冲突
看见别人在用implementation rootProject.ext.dependencies["xxxx"]不知道是什么意思,上网查了一下,原来是为了解决或者说预防gradl ...
- mysql 统一字符编码
配置文件中的注释可以有中文,但是配置项中不能出现中文 #在mysql的解压目录下,新建my.ini,然后配置 #1. 在执行mysqld命令时,下列配置会生效,即mysql服务启动时生效 [mysql ...
- (eclipse)统一文件编码和代码风格
前言 1>每个人的代码风格不一样,以至于代码各式各样,有习惯=号左右加空格的,有习惯不加的,此举有时还会影响svn提交代码 2>注释代码不一样,并且注释风格也不一样 统一文件编码和代码风格 ...
- Android Studio 中 Gradle 依赖的统一管理(rootProjectt)
最近遇到Android Studio 中 Gradle 依赖的统一管理的不懂得地方,看大神的也没看懂,百度了一下,使用起来还挺方便 下面是链接,在这里我就不详细说明了, http://www.jian ...
随机推荐
- java基础算法(一):最大子序列和问题的多种算法思路
问题: /** * 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和,并顺序打印子序列. * 示例: * 输入: [-2,1,-3,4,-1,2,1 ...
- Vue中的计算属性
一.什么是计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护. 二.计算属性的用法 在一个计算属性里可以完成各种复杂的逻辑,包括运算.函 ...
- 时序数据库 Apache-IoTDB 源码解析之文件索引块(五)
上一章聊到 TsFile 的文件组成,以及数据块的详细介绍.详情请见: 时序数据库 Apache-IoTDB 源码解析之文件数据块(四) 打一波广告,欢迎大家访问IoTDB 仓库,求一波 Star. ...
- SpringBoot整合ActiveMQ和开启持久化
一.点对点 1.提供者目录展示 2.导入依赖 <dependency> <groupId>org.springframework.boot</groupId> &l ...
- python练习——第0题
原GitHub地址:https://github.com/Yixiaohan/show-me-the-code 题目:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种 ...
- USBWebServer - 在U盘里搭一个Web服务器!
文章选自我的博客:https://blog.ljyngup.com/archives/321.html/ 本文将介绍一款可以在U盘内直接搭建Web服务器的软件 软件可以免安装直接在U盘内运行,适合外出 ...
- 使用Unicode(宽字节字符集);多字节字符集中定义宽字节变量
2012-03-25 14:54 (分类:计算机程序) 2.2 宽字符和C 宽字符不一定是Unicode.Unicode是宽字符集的一种.然而,因为本书的焦点是Windows而不是C执行的理论,所以书 ...
- Keepalived 工作原理和配置说明
keepalived是什么: 简单来说 Keepalived 的功能功能1.使用VRRP协议 来控制一组高可用(HA) 主备系统,一台master工作,一台slave热备:master失效后slave ...
- iptables服务器主机防火墙
iptables参数说明: Commands: Either long or short options are allowed. --append -A chain 链尾部追加一条规则 --dele ...
- PHP关于mb_substr不能起作用的问题
mb_substr不能起作用最大的原因是因为没有在php.ini文件没有把 ;extension=mbstring 前面的 :号去掉