2

我正在使用 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

这可以通过确定范围来完成吗?

4

1 回答 1

0

如果您在单个项目中需要相同依赖项的两个版本 -1.0.4和-它需要一个多模块构建配置,其中包含两个模块,每个模块都包含依赖于任一依赖项的代码。2.0.0-cdh4.5.0org.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,最终结果将与上述相同。

于 2014-02-14T00:43:35.470 回答