maven使用笔记

maven的scope类型

maven的依赖可以分为多个scope类型,具体如下:

1.Compile

默认的配置。这个jar是会有依赖关系的,而且在打包的时候也会包含依赖jar。

2.Provided

此范围用于标记JDK或容器在运行时应该提供的依赖项。所提供的依赖关系只在编译时项目的测试类路径中可用;而且它们不是传递的。打包时候不会包含依赖jar。

3.Runtime

运行时的依赖jar,在编译时和在运行时会打包,依赖会传递。

4.Test

此范围用于表示在应用程序的标准运行时不需要此依赖关系,但仅用于测试目的。依赖关系不是可传递的,只出现在测试中。

5.System

此属性与所Provided非常相似。这两个scope的主要区别在于,System要求我们直接指向系统上特定的jar。

此属性可以使我们引入第三方的jar(此jar不在maven仓库中,例如一些第三方接口提供的jar)。

注意:

如果指向的jar不存在或者由于不同系统的路径表达不同导致找不到jar,则此属性的依赖会失败。

6.Import

它只对依赖类型pom可用。

例如:

<dependency>
    <groupId>com.baeldung</groupId>
    <artifactId>custom-project</artifactId>
    <version>1.3.2</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

maven的就近原则

eg:

  • A->B->C->D1
  • A->C->D2

那么A实际依赖的将会是D2。

这点在项目中可以用来解决依赖冲突的情况。假如在项目中有依赖的jar包含了冲突的jar,那么可以在依赖jar所在的pom文件中手动排除依赖,然后在添加需要的依赖。

类似以上的例子,可以在A所在的pom中手动排除D2,然后在添加D1到pom文件中,这样的就近原则就使A->D1。

下面一个是工作中实际碰到的例子:由于在此pom中,其他的依赖jar导致了jackson-databind自动依赖了低版本的jackson-annotations和jackson-core。所以在调试的测试的时候,发生报错,然后通过手动排除,在此pom中手动添加的方式,可以依赖高版本的jar。

 

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.9.6</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.9.6</version>
</dependency>

maven下载依赖包时出现connection timeout

出现这个问题,排查的几个方向:

1.机器真的是ping不通仓库

2.本地仓库中下载了不完整的jar。这种情况几率比较高

  仓库中已经下载了相应版本的jar,但是不完整,有lastUpdated后缀的文件。这时候,需要把对应的目录删除(主要删除        lastUpdated文件),然后重新下载,基本可以解决问题。

 

以上是使用maven的一点心得体会,欢迎大神拍砖。

 

参考:

Maven依赖管理:控制依赖的传递:https://ijiangtao.github.io/2018/03/10/java/maven/MavenDependencyMechanism/

Maven Dependency Scopes :https://www.baeldung.com/maven-dependency-scopes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值