更改SBT中特定代码段的库依赖项?

时间:2014-01-15 14:13:25

标签: sbt apache-spark

我正在与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完成吗?

1 个答案:

答案 0 :(得分:0)

如果您需要两个版本 - 1.0.42.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"

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

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