V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leonme
V2EX  ›  程序员

gradle jar 包版本冲突问题

  •  
  •   leonme · 2019-10-17 21:04:57 +08:00 · 2691 次点击
    这是一个创建于 1857 天前的主题,其中的信息可能已经有所发展或是发生改变。

    gradle 默认的解决策略应该是选择有冲突的 jar 包中版本最新的一个,现在的情况是这样:

    自己引入 jackson,版本为 2.9.9。但是有个第三方库内部也用了 jackson,版本为 2.3.3

    然后项目打包之后,结果 jackson 版本为 2.9.8,请问为什么呢?版本不是应该是 2.9.9 吗?

    6 条回复    2019-10-18 08:52:21 +08:00
    binbinyouliiii
        1
    binbinyouliiii  
       2019-10-17 21:59:00 +08:00
    最新版的 IDEA 可以查看 Gradle 项目的依赖关系图
    leonme
        2
    leonme  
    OP
       2019-10-17 22:00:19 +08:00 via iPhone
    @binbinyouliiii 看了依赖图,但是不能理解为啥会版本倒退
    binbinyouliiii
        3
    binbinyouliiii  
       2019-10-17 22:10:36 +08:00
    @leonme #2 Gradle 不是很了解,Maven 的话不是最新为准,Gradle 大致应该类似
    复制自网上:
    依赖最短路径优先原则
    一个项目 Demo 依赖了两个 jar 包,其中 A-B-C-X(1.0) ,A-D-X(2.0)。由于 X(2.0)路径最短,所以项目使用的是 X(2.0)。

    pom 文件中申明顺序优先
    如果 A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,maven 会根据 pom 文件声明的顺序加载,如果先声明了 B,后声明了 C,那就最后的依赖就会是 X(1.0)。

    覆写优先
    子 pom 内声明的优先于父 pom 中的依赖。
    hkllzh
        4
    hkllzh  
       2019-10-18 07:51:31 +08:00
    可以把第三方库依赖的排除,只使用自己依赖的。
    leonme
        5
    leonme  
    OP
       2019-10-18 08:49:41 +08:00 via iPhone
    @hkllzh 谢谢老哥,现在的问题不是怎么解决包冲突问题,而是不太懂 gradle 内部默认的解决包冲突的算法
    leonme
        6
    leonme  
    OP
       2019-10-18 08:52:21 +08:00 via iPhone
    @binbinyouliiii 谢谢老哥,现在的问题是 gradle 默认通过 1.0>1.8 2.0>1.8 方式来解决,很奇怪的解决方式,为啥不采用最高版本呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   996 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:36 · PVG 04:36 · LAX 12:36 · JFK 15:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.