【发布时间】:2017-03-27 22:37:36
【问题描述】:
我有多个 project,我正在我的一个子项目中创建一个带有 git 版本的类。
def iUberdataCoreVersion(version: Option[String] = Some("Not a Git Repository"), dir: File) = {
val file = dir / "UberdataCoreVersion.scala"
IO.write(
file,
s"""package eleflow.uberdata.core\n object UberdataCoreVersion{\n val version = "${version.get}"\n
val sparkVersion = ${allDependencies.value.filter(_.extraString.startsWith("spark")).head.crossVersion}
|}\n""".stripMargin)
Seq(file)
}
依赖项在根项目 build.sbt 文件中定义。我想将 spark 版本(我的依赖项之一)添加到此文件中。有没有办法将参数传递给子项目构建,或者遍历依赖项以发现我使用的是哪个版本的 spark?
在 cmets 中根据需要更新
这里的问题是,在 spark 中有两个版本,在版本 2 中,我可以以与 spark 1 中不同的方式创建它的上下文(以访问 spark 集群)。
root
build.sbt
lazy val subProject = project settings (libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-repl" % sparkVersion)
我有 3 个子项目,spark 版本是共享的,所以我是这样配置的,否则我可以将依赖项插入到子项目构建文件中。
考虑 sparkVersion 作为构建参数提供。
root
sub
build.sbt
在子项目中,我想创建一个包含 spark 版本的文件。这可以在属性文件或 src 代码文件中完成,就像我对 git 代码所做的那样。创建子项目构建时,我可以将其值作为 val 接收吗?
我可以通过它的上下文访问 spark 版本,它有一个属性,但在这种特定情况下,我想在创建上下文之前这样做,这是我的问题。
【问题讨论】:
-
您是否要确保您的根项目和子项目使用相同的版本?如果是这样,你可以把版本号放在一个属性文件中,并在每个子项目的 build.sbt 中读取属性文件
-
或者只是将它们分成另一个文件
dependencies.sbt,然后在相应文件中为每个项目选择您需要的那些,换句话说,将所有dep及其版本放在一个地方,然后将它们选为你希望。请注意,根文件夹中的所有.sbt文件将组合在一起,因此它们可以相互访问(就像它们都在同一个文件中一样)。 -
您能否用一个示例更新您的问题,展示您的 Scala 代码需要做什么?通常,您在
build.sbt中有对SomeLib_2.11-1.2.3.jar的依赖,这是您唯一需要说明它是什么版本的地方。在您的 Scala 类中,您只需来自 JAR 的import com.someco.SomeClass,您不需要指定版本。也许我不明白你需要什么 -
@dirceusemighini 这取决于
access it from sub project的含义。正如@radumanolescu 所提到的,您需要更具体。您需要了解代码中的版本吗?这是一个完全不同的问题,与您的项目是子项目这一事实无关。如果你只是想在子项目中使用依赖,答案是肯定的,所有.sbt文件都可以相互访问。您可以在 sbt docs 上轻松找到示例。 -
您是否考虑将版本作为 val 写入根项目文件夹中的 Build.scala 中?任何子项目都可以访问。