问题 为什么sbt控制台在多模块项目中看不到子项目的包?


这是我的 项目/ Build.scala

package sutils

import sbt._
import Keys._

object SutilsBuild extends Build {

  scalaVersion in ThisBuild := "2.10.0"

  val scalazVersion = "7.0.6"

  lazy val sutils = Project(
    id = "sutils",
    base = file(".")
  ).settings(
    test := { },
    publish := { }, // skip publishing for this root project.
    publishLocal := { }
  ).aggregate(
    core
  )

  lazy val core = Project(
    id = "sutils-core",
    base = file("sutils-core")
  ).settings(
    libraryDependencies += "org.scalaz" % "scalaz-core_2.10" % scalazVersion
  )
}

这似乎正在编译我的项目就好了,但是当我进入控制台时,我无法导入任何刚刚编译的代码?!

$ sbt console
scala> import com.github.dcapwell.sutils.validate.Validation._
<console>:7: error: object github is not a member of package com
       import com.github.dcapwell.sutils.validate.Validation._

我在这做错了什么?试图查看用法,我没有看到在控制台中说明要加载哪个子项目的方法

$ sbt about
[info] Loading project definition from /src/sutils/project
[info] Set current project to sutils (in build file:/src/sutils/)
[info] This is sbt 0.13.1
[info] The current project is {file:/src/sutils/}sutils 0.1-SNAPSHOT
[info] The current project is built against Scala 2.10.3
[info] Available Plugins: org.sbtidea.SbtIdeaPlugin
[info] sbt, sbt plugins, and build definitions are using Scala 2.10.3

3676
2018-06-19 04:56


起源

你总是可以写 sbt sutils/console。 - Alexey Romanov


答案:


来自@ Alexey-Romanov的解决方案可以启动 console 项目中要导入的类的任务。

sbt sutils/console

然而,另一个解决方案是根 sutils 项目 取决于 另一个 core。使用以下代码段设置项目 - 注意 dependsOn core 这将带来的类 core 项目到 sutils命名空间。

lazy val sutils = Project(
  id = "sutils",
  base = file(".")
).settings(
  test := { },
  publish := { }, // skip publishing for this root project.
  publishLocal := { }
).aggregate(
  core
).dependsOn core

顺便说一句,你应该真的使用更简单 build.sbt 对于您的用例如下:

scalaVersion in ThisBuild := "2.10.0"

val scalazVersion = "7.0.6"

lazy val sutils = project.in(file(".")).settings(
  test := {},
  publish := {}, // skip publishing for this root project.
  publishLocal := {}
).aggregate(core).dependsOn(core)

lazy val core = Project(
  id = "sutils-core",
  base = file("sutils-core")
).settings(
  libraryDependencies += "org.scalaz" %% "scalaz-core" % scalazVersion
)

当你将构建拆分为两个时,你可以更容易 build.sbts,每个项目。


14
2018-06-19 09:36