覆盖 sbt 中的传递依赖版本 [重复]

Posted

技术标签:

【中文标题】覆盖 sbt 中的传递依赖版本 [重复]【英文标题】:Override a version of transitive dependency in sbt [duplicate] 【发布时间】:2018-09-07 10:37:49 【问题描述】:

我需要将传递依赖项覆盖到相同的更高版本。

在 Maven 中,我可以通过简单地在顶部添加覆盖来做到这一点。

  <dependencies>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.9</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>2.8.9</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-scala_2.11</artifactId>
      <version>2.8.9</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_$scala.version.dist</artifactId>
      <version>$spark.version</version>
    </dependency>
    <dependency>
    <dependency>
      <groupId>com.mypackage.road</groupId>
      <artifactId>package-that-contains-transitive-deps</artifactId>
      <version>4.2.0</version>
    </dependency>

我如何在 sbt 中做到这一点?也像 maven (Dependency-Hierarchy 选项卡) 中可用的 GUI,它显示了哪些 jar 覆盖了其他的,我如何在 sbt 中看到它?

我已经尝试使用dependencyOverrides 强制我想要的版本。但问题仍然存在。那么我如何检查旧版本是否被我覆盖的版本完全驱逐。 sbt dependencyTree 没有显示较新的依赖关系已经驱逐了传递依赖。

【问题讨论】:

有一个不错的 sbt 插件,用于检查哪些依赖项被驱逐以支持哪个版本:sbt-dependency-graph 【参考方案1】:

您可以使用dependencyOverrides 设置覆盖版本(请参阅linked answer)。

然后您通常会在update 期间看到被驱逐的版本。但是如果由于某种原因你不这样做,你可以在 sbt 中运行show evicted 来输出驱逐警告。示例输出:

...
[warn] Found version conflict(s) in library dependencies; some are suspected to be binary incompatible:
[warn]  * org.scalameta:inputs_2.12:2.1.2 is selected over 2.0.0-M3
[warn]      +- org.scalameta:scalameta_2.12:2.1.2                 (depends on 2.1.2)
[warn]      +- org.scalameta:quasiquotes_2.12:2.1.2               (depends on 2.1.2)
...
[warn] Run 'evicted' to see detailed eviction warnings
[info] Here are other depedency conflicts that were resolved:
[info]  * com.trueaccord.scalapb:scalapb-runtime_2.12:0.6.6 is selected over 0.6.2
[info]      +- org.scalameta:langmeta_2.12:2.1.2                  (depends on 0.6.2)
[info]      +- org.scalameta:metals_2.12:0.1-SNAPSHOT             (depends on 0.6.2)
[info]  * com.lihaoyi:sourcecode_2.12:0.1.4 is selected over 0.1.3
[info]      +- com.lihaoyi:fansi_2.12:0.2.5                       (depends on 0.1.4)
[info]      +- com.lihaoyi:fastparse-utils_2.12:0.4.4             
...

【讨论】:

以上是关于覆盖 sbt 中的传递依赖版本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

执行 JAR 后 Scala SBT Shell 中的 java.lang.NoSuchMethodError [重复]

SBT:多构建依赖/聚合项目中的覆盖设置

覆盖maven中的传递版本依赖

SBT 在装配过程中允许重复

sbt 程序集合并问题 [去重:在下面找到不同的文件内容]

Play 2.0 / SBT:从 Build.scala 中的某些/所有模块中排除某些传递依赖项