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可用。

例如:


    com.baeldung
    custom-project
    1.3.2
    pom
    import

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。

 


    com.fasterxml.jackson.core
    jackson-databind
    2.9.6
    
        
            com.fasterxml.jackson.core
            jackson-annotations
        
        
            com.fasterxml.jackson.core
            jackson-core
        
    


    com.fasterxml.jackson.core
    jackson-annotations
    2.9.6


    com.fasterxml.jackson.core
    jackson-core
    2.9.6

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

你可能感兴趣的:(Java)