Maven面试每日5题

113 阅读2分钟

依赖寻找顺序

首先会去本地仓库寻找,然后会去公司的私服仓库寻找,一般私服仓库存的都是公司自己开发的 jar 包,最后会去 由Apache 团队来维护中央仓库寻找,一旦在一个地方找到就不再寻找

如果确认这个依赖的唯一元素

我们利用 groupIdartifactIdversion 标签来确认这个依赖的唯一坐标

<groupId>:企业网址反写+项目名
<artifactId>:项目名-模块名
<version>:当前版本

<groupId>com.juejin.business</groupId>
<artifactId>juejin-image-web</artifactId>
<version>1.0.0-SNAPSHOT</version>

Scope范围有哪些

我们常用的 scope 的范围是

compiletestprovidedruntime
主程序xx
测试程序x
参与部署xx
  • compile:默认范围,编译、测试、运行都有效
  • provided:编译和测试有效,最后运行不会被加入,如tomcat依赖
  • runtime:在测试和运行的时候有效,编译不会被加入,比如jdbc驱动jar
  • test:测试阶段有效,比如junit
  • system:与provided一致,编译和测试阶段有效,但与系统关联,可移植性差
  • import:导入的范围,它只是用在dependencyManagement中,表示从其它的pom中导入dependency的配置

依赖范围的传递性

image.png

image.png

如何排除依赖

有俩种方法 第一种:

 <dependency>
        <groupId>com.juejin.business</groupId>
        <artifactId>juejin-image-web</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <exclusions>
            <exclusion>
                <groupId>com.juejin.business</groupId>
                <artifactId>juejin-convert-web</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

第二种:

<dependency>
        <groupId>com.juejin.business</groupId>
        <artifactId>juejin-convert-web</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <optional>true</optional>
 </dependency>
重要英语翻译
Maven
groupId项目名
artifactId项目名-模块名
version当前版本
compile默认范围,编译、测试、运行都有效
provided编译和测试有效,最后运行不会被加入,如tomcat依赖
runtime在测试和运行的时候有效,编译不会被加入,比如jdbc驱动jar
test测试阶段有效
system与provided一致,编译和测试阶段有效,但与系统关联,可移植性差
import导入的范围,它只是用在dependencyManagement中,表示从其它的pom中导入dependency的配置