• 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,这样只能让其中一个项目不继承,自己另外配置依赖,所以如果保证项目使用的依赖版本不会发生改变,还是建议用父工程的。

    有什么疑问或建议欢迎在评论区发表。

  • 相关阅读:
    pdfobject (前台展示PDF插件)
    ERROR 19608 --- [ost-startStop-1] c.atomikos.persistence.imp.LogFileLock : ERROR: the specified log seems to be in use already: tmlog in D: ools omcatapache-tomcat-8.5.51in ransaction-logs
    文件上传下载(四) 读 txt 文本 ajaxfileupload
    1129
    centos服务器上部署项目(二) -tomcat
    Guns 打包
    centos服务器上部署项目(一) -jdk,mysql
    layui 学习笔记(四) 复杂表头前台Excel导出
    SpringCloud项目搭建(四) zuul
    sql的基本查询语句
  • 原文地址:https://www.cnblogs.com/unlasting/p/12203081.html
Copyright © 2020-2023  润新知