06 maven的依赖管理,jar包冲突解决

 

依赖是maven最为用户熟知的特性之一,单个项目的依赖管理并不难,但是要管理几个或者几十个模块的时,那这个依赖应该怎么管理

  •  

    依赖的传递性

    •  

       

    • A 依赖 B,B 依赖 C,A 能否使用 C 呢?那要看 B 依赖 C 的范围是不是 compile,如果是则可用,否则不可用

  •  

    依赖的作用范围

    •  

      compile

      •  

        这是默认范围,编译依赖对项目所有的classpath都可用。此外,编译依赖会传递到依赖的项目

    •  

      provided

      •  

        表示该依赖项将由JDK或者运行容器在运行时提供,也就是说由Maven提供的该依赖项我们只有在编译和测试时才会用到,而在运行时将由JDK或者运行容器提供。

    •  

      runtime

      •  

        表明编译时不需要依赖,而只在运行时依赖

    •  

      test

      •  

        只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。

    •  

      system

      •  

        系统范围与provided类似,不过你必须显式指定一个本地系统路径的JAR,此类依赖应该一直有效,Maven也不会去仓库中寻找它。

        ...

        sun.jdk

        tools

        1.5.0

        system

        ${java.home}/../lib/tools.jar

        ...

    •  

      import

      •  

        范围只适用于部分。表明指定的POM必须使用部分的依赖。因为依赖已经被替换,所以使用import范围的依赖并不影响依赖传递。

  •  

    依赖的两大原则

    •  

      06 maven的依赖管理,jar包冲突解决_第1张图片

  •  

    依赖的管理

    •  

      依赖排除

      •  

        任何可传递的依赖都可以通过 "exclusion" 元素被排除在外。举例说明,A 依赖 B, B 依赖 C,因此 A 可以标记 C 为 "被排除的"06 maven的依赖管理,jar包冲突解决_第2张图片

    •  

      依赖可选

      •  

        任何可传递的依赖可以被标记为可选的,通过使用 "optional" 元素。例如:A 依赖 B, B 依赖 C。因此,B 可以标记 C 为可选的, 这样 A 就可以不再使用 C。

06 maven的依赖管理,jar包冲突解决_第3张图片

 

 

jar包冲突解决

 

 

命令: mvn dependency:tree -Dverbose

 

1.maven的jar包冲突解决(一般使用排除依赖的方式解决jar包冲突)

 

06 maven的依赖管理,jar包冲突解决_第4张图片

 

 

 

 

 

 

你可能感兴趣的:(maven)