我正在与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完成吗?
答案 0 :(得分:0)
如果您需要两个版本 - 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"
使用构建配置,您可以按照代码/模块分离。
您还可以在每个项目的libraryDependencies
中定义这些build.sbt
设置,最终结果与上述相同。