Scala Play和多项目SBT构建

时间:2017-02-12 16:55:21

标签: scala playframework-2.0 sbt

我创建了一个像这样的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不能再编译项目了,它找不到任何播放框架依赖项。

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 个答案:

答案 0 :(得分:2)

能给我一些想法的东西是:

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.x 2.12.x