Gradle-04 包管理及解决冲突方案

依赖配置阶段

  1. build.gradle 中的dependencies 中配置依赖,依赖分以下四种
  • 源码依赖(src/main/java) :compile,runtime
  • 测试依赖(src/main/test) :testCompile,runtime
  1. 依赖配置(判断仅仅是运行阶段需要依赖还是仅仅测试阶段需要依赖)
  • compile 测试阶段的编译和运行存在,源码运行阶段存在
  • runtime 只有测试运行阶段,源码运行阶段这两个阶段存在
  • testCompile 测试代码阶段的编译和运行存在
  • testRuntime 只有测试代码阶段的运行阶段存在

版本冲突解决

  1. maven自动解决传递依赖的策略
  • 最短路径原则(需要D包)

    • D1路径:项目 → A → D1
    • D2路径:项目 → B → E1 → D2
    • D1与D2是名字相同但版本不同的包,D1路径短,所以使用D1中声明的依赖版本
  • 优先声明原则(需要D包)

    • D3路径:项目 → A → E1 → D3
    • D4路径:项目 → B → E2 → D3
    • 路径相同,但是E包的版本不同,由于E1先声明,所以使用E1声明的依赖版本
  • 存在的问题(去查如何解决)

    • 在D2与D3 情况下,若想要高版本的D3包,但由于先声明了E1,所以只能使用D2中低版本的D2功能,D3中D包的新功能无法使用
  1. gradle解决传递依赖版本冲突的策略
  • 查看jar包冲突的方法:关闭默认自动解决冲突 的策略,构建时会抛出哪些jar包冲突的异常,然后再去处理冲突。使用configurations.all{resolutionStrategy{failOnVersionConflict()}}
  • 方案一:dependencies函数中排除传递依赖中冲突的版本,不使用它,exclude group:"xxx",module:"xxx",由程序员自己配置需要使用的版本
  • 方案二:手动指定使用的版本,使用configurations.all{resolutionStrategy{force'group:name:version'}}
原文地址:https://www.cnblogs.com/luckyCoder/p/12732481.html