【问题标题】:Changing libraryDependencies for specific code segments in SBT?更改 SBT 中特定代码段的 libraryDependencies?
【发布时间】:2014-02-04 01:21:48
【问题描述】:

我正在使用 SBT 构建一个 Spark 项目。

当我包含一个 libraryDependencies 时,程序的一部分将工作,另一部分将抛出异常(因为在 libraryDependencies 中指定了错误的版本)。当我删除 libraryDependencies 时,情况正好相反。

有没有办法在编译或运行时动态更改libraryDependencies(更改版本)?

类似(伪代码):

libraryDependencies.set("org.apache.hadoop.hadoop-client", "2.0.0-cdh4.5.0")

// here comes the code depending on hadoop-client" % "2.0.0-cdh4.5.0

libraryDependencies.set("org.apache.hadoop.hadoop-client", "1.0.4")

// here comes the code depending on hadoop-client" % "1.0.4

这可以由scoping完成吗?

【问题讨论】:

  • 你怎么能期望在编译和运行时有不同版本的库?!您可能根据其他设置有不同的设置,但是您所追求的对我来说没有意义。需要更多帮助来理解问题。您想在不同的代码块中添加什么?我认为您需要不同的模块,有效地创建a multi-project build。
  • 感谢您的评论@JacekLaskowski 也许我应该更好地表达它,我想在程序的不同部分依赖不同的库。 (这里:我想使用一个版本的库从 HDFS 读取,然后使用该库的另一个(mapreduce)版本将此文件写入 Cassandra。多项目构建是否可能?
  • 您应该将评论添加到问题中,因为它更容易理解。您绝对应该使用多项目构建,其中有两个模块 - HDFS 阅读器和 Cassandra 编写器。正如您所指出的,它们是分开的(不仅仅是因为它们使用的库)。
  • @JacekLaskowski 好的,我明白了,我创建了一个测试项目,但是我找不到任何关于如何在主文件中调用这两个模块的好的文档。所以我又提出了一个问题,你能看看吗? stackoverflow.com/questions/21183074/…

标签: sbt apache-spark


【解决方案1】:

如果您需要两个版本 - 1.0.4 和 2.0.0-cdh4.5.0 - 在单个项目中具有相同的依赖项 org.apache.hadoop.hadoop-client,则需要使用两个模块的多模块构建配置,每个模块都包含依赖于任一依赖项的代码.

在一个项目中,比如projectA,您将拥有1.0.4 依赖项和使用它的代码,而在另一个项目中,比如projectB 2.0.0-cdh4.5.0 和代码的另一部分。

话虽如此,build.sbt 可能如下所示:

lazy val projectA, projectB = project

libraryDependencies in projectA += "org.apache.hadoop" % "hadoop-client" % "1.0.4"

libraryDependencies in projectB += "org.apache.hadoop" % "hadoop-client" % "2.0.0-cdh4.5.0"

使用构建配置,您可以遵循代码/模块分离。

您也可以在每个项目的build.sbt 中定义这些libraryDependencies 设置,最终结果将与上述相同。

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 2016-01-13
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    • 1970-01-01
    相关资源
    最近更新 更多