Scala Play 和多项目 SBT 构建

Scala Play and Multi Project SBT Builds

我创建了这样一个 scala play 项目

activator new foo play-event-sourcing-starter

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

但是我想要的是我应该有一个多项目 sbt 构建。我用谷歌搜索并找到了这个 https://www.playframework.com/documentation/2.5.x/SBTSubProjects

但这和我想要的不一样,因为这里他们已经作为根项目来玩了。而我想要的是我有一个带有 build.sbt 文件的空根项目,然后是多个 "peer" 项目。其中之一是玩耍。

所以我把步骤改成了

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 无法再编译该项目并且找不到任何 play 框架依赖项。

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")

给我一些想法的是什么问题:

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

你不感到惊讶吗,sbt 试图下载 Scala 2.10 的播放服务器版本,它不存在对于 Play 2.5.x,因为它已经超出了生命周期。

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

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

所以,我认为您只需要添加 scalaVersion 参数并将其设置为 2.11.x2 中的内容.12.x