sbt multimodule项目从另一个模块

时间:2017-04-03 06:02:53

标签: scala sbt

我有一个包含多个模块的sbt项目,每个模块都有自己的build.sbt文件。

在根项目中,我有以下内容:

lazy val commonSettings = Seq(
    organization := "com.game.scala",
    sourcesInBase := false,
    fork in run := true,
    scalaVersion := "2.12.1"
)

lazy val common = project.settings(commonSettings)

lazy val original = project.settings(commonSettings).dependsOn(common)

lazy val functional = project.settings(commonSettings).dependsOn(common)

lazy val root = (project in file("."))
  .aggregate(original, functional)
  .settings(commonSettings)

所有子模块中的build.sbt几乎相同:

lazy val module = (project in file("."))

  .settings(
    name := "Game subpart",
    version := "0.1.0-SNAPSHOT"
  )

项目布局如下:

root
|__ common
|__ original
|__ functional

问题是,在functional模块中,如果我尝试导入common模块中声明的特征,我会收到一个错误,它不可用:

  

错误:(1,12)对象游戏不是包com的成员

     

import com.game.scala

我错过了什么?

1 个答案:

答案 0 :(得分:1)

这是因为您从未编译过common项目。除非明确要求,否则dependsOn方法仅向其他项目添加依赖项,但不对其执行任何操作。如果您希望在编译functional模块时重新编译依赖项,则应同时执行dependsOn(common)aggregate(common)