sbt 子项目的项目目录

Posted

技术标签:

【中文标题】sbt 子项目的项目目录【英文标题】:project directory for sbt sub-projects 【发布时间】:2016-06-03 10:46:43 【问题描述】:

sbt 子项目可以有自己的project 目录吗?还是只有根项目可以使用 .scala 帮助文件的项目目录进行构建?。以下是我当前的构建结构。 /my-project/sub-projects/sub-project-1/build.sbt 无法访问/my-project/sub-projects/sub-project-1/SubProjectHelper.scala 中定义的对象。

/my-project
  build.sbt
  /projects
    Helper.scala
  sub-projects
    sub-project-1
      build.sbt
      /projects
        SubProjectHelper.scala

更新: sub-project-1/build.sbt 中的以下 sbt 定义

lazy val localhost = (project in file(".")).settings (
    name := """localhost""",
    version := Common.version,
    scalaVersion := Common.scalaVersion,
    libraryDependencies ++= Common.dependencies,
    libraryDependencies ++= Localhost.dependencies
)

因以下错误而失败

    libraryDependencies ++= Localhost.dependencies
                            ^
sbt.compiler.EvalException: Type error in expression
    at sbt.compiler.Eval.checkError(Eval.scala:384)
    at sbt.compiler.Eval.compileAndLoad(Eval.scala:183)
    at sbt.compiler.Eval.evalCommon(Eval.scala:152)
    at sbt.compiler.Eval.evalDefinitions(Eval.scala:122)
    at sbt.EvaluateConfigurations$.evaluateDefinitions(EvaluateConfigurations.scala:271)
    at sbt.EvaluateConfigurations$.evaluateSbtFile(EvaluateConfigurations.scala:109)
    at sbt.Load$.sbt$Load$$loadSettingsFile$1(Load.scala:712)

Common 在 /my-project/projects/Common.scala 中定义,没有问题。但是 Localhost 是在 /my-project/sub-projects/sub-project-1/projects/SubProjectHelper.scala 中定义的,在 sub-project-1 build.sbt 中没有正确解析

【问题讨论】:

【参考方案1】:

是的,他们可以,甚至不需要sub-projects 目录,只需将sub-project-1 放在my-project 目录中即可。

【讨论】:

我已更新问题以添加更多信息。你能告诉我出了什么问题吗?【参考方案2】:

通常(至少这是 scala/scala-seed.g8 的结尾)项目子目录不会像您的目录结构那样以额外的 s 结尾。

您应该将projects 重命名为project

【讨论】:

【参考方案3】:

很遗憾,答案是否定的。如所见here

子项目中不能有项目子目录或 project/*.scala 文件。 foo/project/Build.scala 将被忽略。

【讨论】:

以上是关于sbt 子项目的项目目录的主要内容,如果未能解决你的问题,请参考以下文章

如何在 sbt 子项目 build.sbt 文件中获取对当前项目的引用

SBT 多项目构建:针对不同子项目的 2 个不同版本的 sbt play 插件

sbt:子项目的动态聚合

如何让 SBT 跳过给定子项目的交叉编译?

为多项目中的子项目指定不同版本的 sbt?

SBT将项目ID添加到多项目构建中的日志中