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

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

  • 相关阅读:
    基于Metaweblog API 接口一键发布到国内外主流博客平台
    uva144 Student Grants
    Uva 10452
    Uva 439 Knight Moves
    Uva 352 The Seasonal War
    switch语句
    java——基础知识
    我的lua学习2
    codeforces 431 D. Random Task 组合数学
    codeforces 285 D. Permutation Sum 状压 dfs打表
  • 原文地址:https://www.cnblogs.com/unlasting/p/12203081.html
Copyright © 2011-2022 走看看