Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在SBT中跨多个存储库构建多模块项目_Scala_Sbt - Fatal编程技术网

Scala 在SBT中跨多个存储库构建多模块项目

Scala 在SBT中跨多个存储库构建多模块项目,scala,sbt,Scala,Sbt,我们正在使用SBT和常春藤,但在多模块项目方面存在问题。我不确定是否有更好的方法来做我们正在尝试做的事情 我们有一个父模块,它聚合子模块: lazy val `foo-parent` = (project in file(".")) .aggregate(`foo-layout`,`foo-environment`,...) .settings(commonSettings: _*) 以及一些子模块,例如: lazy val `foo-layout` = Project("foo-la

我们正在使用SBT和常春藤,但在多模块项目方面存在问题。我不确定是否有更好的方法来做我们正在尝试做的事情

我们有一个父模块,它聚合子模块:

lazy val `foo-parent` = (project in file("."))
  .aggregate(`foo-layout`,`foo-environment`,...)
  .settings(commonSettings: _*)
以及一些子模块,例如:

lazy val `foo-layout` = Project("foo-layout", file("foo-layout"))
  .settings(commonSettings: _*)
  .settings(
    libraryDependencies ++= Seq(
      `...),
    name := "foo-layout"
  ).dependsOn(`foo-config`)
我们有一个核心的库模块,聚合在
foo parent
中,都在同一个git repo中,并在单独的repo中为客户提供“实现”模块。在实现模块中,我们用于将子模块作为库依赖项导入,例如:

libraryDependencies += "com.foo" %% "foo-layout" % foo_version
问题是,在
foo parent
中更改任何内容时,您必须手动执行
sbt publishLocal
,或者在IntelliJ中将模块设置为“模块依赖项”,每次刷新项目时,都会重置为使用JAR

现在我们有了一个符号链接“foo-source”,它链接到所有子模块所在的目录“foo-parent”,在使用source和jar之间切换时感觉有些错误

val compileFooFromSource = false
lazy val foo_parent: Project = Project("foo-parent", file("foo-source"))
lazy val foo_dependencies = Seq("foo-environment", "foo-layout", ...)
lazy val test: Project = compileFooFromSource match {
  case false =>
    Project("test", file("."))
      .settings(artifactSettings: _*)
      .settings(
        libraryDependencies ++= foo_dependencies.map( mod =>
          ("com.foo" % mod % version.value)
        )
      )
  case true =>
    Project("test", file("."))
      .settings(artifactSettings: _*)
      .dependsOn(foo_dependencies.map(s => classpathDependency(s)): _*)

}
这种方法依赖于符号链接,这可能会给Windows开发人员或CI带来问题(我们必须记住在提交之前将源标志更改为false,否则CI将中断)
这是在多个回购协议中建立这样的多模块项目的唯一方式吗?是否有更多的SBT“方法”?

为什么不在build.SBT内创建其他模块并使用
dependsOn
?我们不能在
父项目中创建模块,因为许多单独的客户端项目都使用该代码。上面的大块来自client build.sbt,但是在该build.sbt中创建父模块的唯一方法是像我所做的那样使用符号链接?