影响编译和运行时的“依赖覆盖”



sbt 库管理文档解释了如何通过 dependencyOverrides 覆盖特定库。

文档的示例显示:

例如,以下依赖项定义冲突,因为spark使用log4j 1.2.16scalaxb使用log4j 1.2.17

添加dependencyOverrides += "log4j" % "log4j" % "1.2.16"时,这是否强制log4j的编译和运行时版本1.2.16

在上面的例子中,如果spark使用1.2.16scalaxb使用1.2.17,那么使用上述dependencyOverrides标志的编译和运行时效果是什么?

依赖项没有两个编译时和运行时版本。

如果一个传递依赖关系是运行时的依赖关系(spark),而编译时是另一个依赖关系(scalaxb),那么它就变成了编译时。

因此,dependencyOverrides通过显式固定要使用的版本来替代该依赖项的自动版本冲突解决方案。

最新更新