代码之家  ›  专栏  ›  技术社区  ›  Heisenberg

在父项目和子项目中使用库的不同版本

  •  0
  • Heisenberg  · 技术社区  · 6 年前

    我有个计划 小孩 下面是build.gradle。

    dependencies{
       compile 'com.google.guava:guava:17'
    }
    

    我还有一个项目叫 起源 下面是build.gradle。

    dependencies{
           compile project(':child')
           compile 'com.google.guava:guava:23'
        }
    

    现在我的问题是子项目在运行时将使用哪个版本?我知道Gradle依赖树显示 17 -> 23 是的。但这是否意味着 小孩 也会使用更新版本的番石榴吗如果我想用 guava:23 在里面 起源 但它缺少一些类 小孩 使用?

    如果我不能控制 小孩 它作为外部依赖项包含在父类中,如:

    compile 'xxx:child:1.0'

    这是不是意味着我永远无法升级我的番石榴版本,直到 小孩 做?

    1 回复  |  直到 6 年前
        1
  •  1
  •   J Fabian Meier    6 年前

    在Java中,类路径上最多只能有一个库的版本(或者,至少,其他所有东西都会带来麻烦…)。

    因此,如果你的“父母”使用“孩子”,他们都使用番石榴,你需要找到一个版本的番石榴,适合他们俩。

    通常,如果Gradle在依赖树上找到多个版本,它会使用最新版本的依赖项您当然可以获得更细粒度的控制,但很长一段时间没有使用gradle(只有maven,在这里您的直接依赖总是获胜,其他冲突通过dependencymanagement解决)。