【问题标题】:Dependency conflicts in scala multi moduled projectsscala多模块项目中的依赖冲突
【发布时间】:2021-06-22 04:55:48
【问题描述】:

我有以下项目结构。

project
 |_build.properties
 |_plugins.sbt
Core
Module1
Module2
build.sbt

在 Module1 和 Module2 中,我在不同版本中使用相同的依赖项。然后我将 2 个模块与核心模块聚合在一起。然后一个依赖被另一个版本驱逐。如何保留两个依赖版本?

更新:预期的依赖树如下:

core_1.0-SNAPSHOT
-module1_1.0
--org.milyn:milyn-smooks-core:1.1
-module2_1.0
--org.milyn:milyn-smooks-core:1.5.2

module1_1.0-SNAPSHOT
-org.milyn:milyn-smooks-core:1.1

module2_1.0-SNAPSHOT
-org.milyn:milyn-smooks-core:1.5.2

而且,我得到如下:

    core_1.0-SNAPSHOT
    -module1_1.0
    --org.milyn:milyn-smooks-core:1.1 (evicted by 1.5.2)
    -module2_1.0
    --org.milyn:milyn-smooks-core:1.5.2
    
    module1_1.0-SNAPSHOT
    -org.milyn:milyn-smooks-core:1.1
    
    module2_1.0-SNAPSHOT
    -org.milyn:milyn-smooks-core:1.5.2

我怎样才能无视驱逐?

【问题讨论】:

  • 你需要给它们加阴影。

标签: scala dependencies multi-module


【解决方案1】:

在 99% 的情况下,您不希望拥有相同依赖项的两个版本。假设它们包含相同的类(同名),则会导致运行时错误,因为只会加载一个版本(先到先加载)。

你可能想做的是:

  • 要么让驱逐完成它的工作(它应该选择最新版本)
  • 或者,在所有模块中定义相同的版本
  • 或者,在“核心”模块中定义一些dependencyOverrides 来强制一个版本(可以是“模块1”、“模块2”,甚至是另一个)

【讨论】:

  • 在我的例子中,模块 1 使用 org.milyn:milyn-smooks-core:1.1,模块 2 使用 org.milyn:milyn-smooks-core:1.5.2。这两个用于不同类型的 CSV 转换。在核心模块中。我有 2 个测试要运行,每个测试都在模块 1 和模块 2 上。为了运行这两个测试,我需要相同依赖项的 1.1 和 1.5.2 版本。但由于依赖 1.1 被 1.5.2 驱逐,我得到“NoSuchMethodError”异常。
  • 核心模块将如何使用?人们会使用它但只使用模块1转换或模块2转换?
  • Module1 或 Module2 根据转换类型使用。 (是的,我们不能同时使用两个模块)但是,当我尝试执行测试时,一个测试失败了,因为两个模块都使用相同版本的库。 (我用依赖树更新问题)
  • 如果最终我们不能'同时使用两个模块如你所说,那么我会将核心模块分成2个。或者也许将测试移到 2 个不同的“core_tests”模块
  • 谢谢你的建议,直到你说,我才想到。我将尝试拥有 2 个不同的核心模块。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 2020-09-03
  • 2022-09-27
  • 1970-01-01
  • 2014-03-04
相关资源
最近更新 更多