【问题标题】:Can not import Dependencies.scala from top level sbt in multiproject无法从多项目中的顶级 sbt 导入 Dependencies.scala
【发布时间】:2017-07-19 02:17:52
【问题描述】:

我在 sbt 中有一个 commons 项目,它需要一些值存储在 Dependencies.scala 中。

.
├── build.sbt
├── project
│   └── Dependencies.scala
└── src
    └── main
        └── scala

commons/build.sbt

import Dependencies._

lazy val commons = (project in file("."))
  .settings(
    name := s"$msg commonsproject",
    version := "1.0",
    scalaVersion := "2.12.2"
  )

commons/project/Dependencies.scala

object Dependencies {
  val msg = "Hello world"
}

当我运行 sbt 时,我得到了 name 的正确值

[info] Loading project definition from /mydata/workspace/multiproject/commons/project
[info] Set current project to Hello world commonsproject (in build file:/mydata/workspace/multiproject/commons/)
> name
[info] Hello world commonsproject
>

现在,我已将其集成到顶级 sbt 项目中。

├── build.sbt(top level)
├── commons
│   ├── build.sbt
│   ├── project
│   │   └── Dependencies.scala
│   └── src
│       └── main
├── project
│   └── build.properties
└── src
    ├── main
    │   └── scala
    └── test
        └── scala

build.sbt

lazy val commons = (project in file("commons"))
  .settings(
    name := "subproject",
    version := "1.0",
    scalaVersion := "2.12.2"
  )


lazy val root = (project in file("."))
  .settings(
    name := "rootproject",
    version := "1.0",
    scalaVersion := "2.12.2"
  ).aggregate(commons)

当我从顶层运行 sbt 时,它失败并出现以下错误:

/mydata/workspace/multiproject/commons/build.sbt:1: error: not found: object Dependencies
import Dependencies._
^
/mydata/workspace/multiproject/commons/build.sbt:6: error: not found: value msg
name := s"$msg commonsproject",
^
sbt.compiler.EvalException: Type error in expression
[error] sbt.compiler.EvalException: Type error in expression
[error] Use 'last' for the full log.</pre>

谁能知道是否可以将Dependencies.scala 保留在common 项目中并且仍然能够从顶级sbt 运行它?

目标是能够在顶层或子项目中运行 sbt,同时保持每个项目的依赖关系。

也欢迎其他实现我想要的设计

谢谢

这里是示例项目https://github.com/ccheneson/multiproject

【问题讨论】:

    标签: sbt


    【解决方案1】:

    来自SBT 0.13 docs

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

    在这种情况下,您的 Dependencies.scala 文件将被忽略,因为 commons 是一个子项目 - 这就是您无法访问它的原因。

    【讨论】:

    • 知道从项目到子项目共享依赖项的正确方法是什么吗?
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 2018-11-10
    • 1970-01-01
    • 2014-09-16
    • 2021-09-10
    • 2021-01-09
    • 2017-01-02
    • 1970-01-01
    相关资源
    最近更新 更多