我使用sbt 0.13.1创建了两个模块,并创建了project/MyBuild.scala来编译这两个模块. MyBuild.scala:
import sbt._
import Keys._
object MyBuild extends Build {
lazy val task = project.in(file("task"))
lazy val root = project.in(file(".")) aggregate(task) dependsOn task
}
Run Code Online (Sandbox Code Playgroud)
当我通过设置scalaHome将scala库更改为2.11.2时.它会去maven下载task.jar并失败,这很奇怪.这是一个sbt bug吗?
有github测试项目地址:test-sbt-0.13.1
这是因为您scalaVersion在main build.sbt中定义了一个自定义,这意味着它仅为根项目定义.任务项目将使用默认值:
jjst@ws11:test-sbt-0.13.1$ sbt
[...]
> projects
[info] In file:/home/users/jjost/dev/test-sbt-0.13.1/
[info] * root
[info] task
> show scalaVersion
[info] task/*:scalaVersion
[info] 2.10.4
[info] root/*:scalaVersion
[info] 2.11.2-local
Run Code Online (Sandbox Code Playgroud)
因此,任务子项目生成的工件将无法供根项目使用.
您可以通过确保您的项目使用相同的方法来解决此问题scalaVersion.保持相同项目结构的最简单方法是在项目中共享scala版本等常见设置,如下所示:
object MyBuild extends Build {
val commonSettings = Seq(
scalaVersion := "2.11.2-local",
scalaHome := Some(file("/usr/local/scala-2.11.2/"))
)
lazy val task = (project.in(file("task"))).
settings(commonSettings: _*)
lazy val root = (project.in(file("."))).
settings(commonSettings: _*).
aggregate(task).
dependsOn(task)
}
Run Code Online (Sandbox Code Playgroud)
实际上,您可能希望将项目之间共享的公共设置放在专用文件中project/common.scala,如有效sbt中所建议的那样.