2017-02-12 64 views
1

我创建了一个阶发挥项目这样斯卡拉播放和多项目SBT构建

activator new foo play-event-sourcing-starter 

已成功生成项目,我可以进去,轻松地编译和运行应用程序。

但是我想要的是我应该有一个多项目sbt构建。我GOOGLE了,发现这https://www.playframework.com/documentation/2.5.x/SBTSubProjects

但这不是我想要的,因为在这里他们有发挥作为根项目。而我想要的是,我有一个空的根项目与build.sbt文件,然后多个“同行”项目。其中之一就是玩。

因此,我改变步骤

mkdir -p LearnPlay/project 
cd LearnPlay 
activator new foo play-event-sourcing-starter 

现在我走了进去foo和移动build.sbt到LearnPlay目录。我还将build.propertiesplugins.sbt文件移动到LearnPlay/project文件夹中。

我编辑的build.sbt文件,以便根项目成为

lazy val root = (project in file("foo")).enablePlugins(PlayScala) 

但是现在SBT不能再编译该项目,它不能找到任何播放框架依赖。

sbt.ResolveException: unresolved dependency: com.typesafe.play#play-server_2.10;2.5.9: not found 
unresolved dependency: com.typesafe.play#play-netty-server_2.10;2.5.9: not found 
unresolved dependency: com.typesafe.play#play-logback_2.10;2.5.9: not found 
unresolved dependency: com.typesafe.play#play-test_2.10;2.5.9: not found 
unresolved dependency: com.typesafe.play#play-omnidoc_2.10;2.5.9: not found 
    at sbt.IvyActions$.sbt$IvyActions$$resolve(IvyActions.scala:313) 

这些是我的plugins.sbt文件的内容。解析器的定义是正确的,所以我不确定为什么在文件从子项目移动到根项目后sbt将无法找到依赖项。当文件位于foo项目的项目目录中时,它能够解决所有问题。

resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" 

// The Play plugin 
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.5.9") 

// web plugins 
addSbtPlugin("com.typesafe.sbt" % "sbt-digest" % "1.1.0") 

回答

1

这给了我一些想法有什么问题存在的事情:

unresolved dependency: com.typesafe.play#play-server_2.10;2.5.9: not found 

难道你不感到惊讶,那SBT尝试下载游戏服务器的版本斯卡拉2.10对于Play 2.5.x不存在,因为它已经超出生命周期。

在我的项目中,如果我没有在build.sbt中指定scala版本或将其设置为2.10(例如,

lazy val root = (project in file("foo")).settings(
    scalaVersion := "2.10.6", 

所以,我想你只需要把它从2.11.x2.12.x

+0

你是正确的,但添加scalaVersion参数和设置的东西它是一个有点令人惊讶,因为scalaVersion是在sbt项目中指定,但不直接在根项目本身上指定。当它在根项目中时,它能够选择正确的scala版本......但不能在使用该目录时使用。 –

+0

你能完整展示你的build.sbt吗? – Mysterion