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 ...
随机推荐
- day01_前言、入门程序、常量、变量
day01_前言.入门程序.常量.变量 sysout :System.out.println(); Java 概述 本节主要内容: java 概述.常 DOS 命令.JRE.JDK 与 JVM.环境搭 ...
- 我的一个git(码云)之旅
合作开发项目,你就会用到git,现在码云比较简单,因为是中文化界面,学习起来难度比较低,又支持5人以下项目免费,所以学习码云更好入手一点. 下面的东西适合一些个基础比较低的用户学习,因为我就是啊... ...
- 9. Palindrome Number QuestionEditorial Solution
Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...
- FFMPEG学习----遍历所支持的解码器
下面简单介绍一下遍历ffmpeg中的解码器信息的方法(这些解码器以一个链表的形式存储): 1.注册所有编解码器:av_register_all(); 2.声明一个AVCodec类型的指针,比如说AVC ...
- 从Libra看区块链的机遇
一番码客 : 挖掘你关心的亮点.http://www.efonmark.com 关于未来的思考 记得去年扎克伯格搞Libra的时候,引起了世界的关注.但随着美国国会听证会的阻力,渐渐很少听见Libra ...
- Java中的8种基本数据类型
JAVA中的8种基本数据类型:byte short int long float double char boolean 特别说明: 1)char类型占2个字节,可以表示汉字.汉字和英文字符都占2个字 ...
- HDU_3853_概率dp
http://acm.hdu.edu.cn/showproblem.php?pid=3853 又因为总期望为子期望的加权和,加权因子为子期望的转移概率,所以得到:dp[ i ][ j ]= p1 * ...
- HDU_1175_dfs
http://acm.hdu.edu.cn/showproblem.php?pid=1175 dfs(x,y,i,num),xy表示位置,i表示方向,num表示转向次数,num=2时候的剪枝很重要. ...
- 快速了解Lambda表达式-Java
目录 lambda表达式 前言 简介 简单入门 用法 好处 总结 lambda表达式 前言 最近因为疫情,也不能正常返校什么的,希望大家都能好好的,希望武汉加油,中国加油,在家也看了很多视频,学了一点 ...
- 程序员过关斩将--redis做消息队列,香吗?
Redis消息队列 在程序员这个圈子打拼了太多年,见过太多的程序员使用redis,其中一部分喜欢把redis做缓存(cache)使用,其中最典型的当属存储用户session,除此之外,把redis作为 ...