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.properties
和 plugins.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.x 或 2 中的内容.12.x
我创建了这样一个 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.properties
和 plugins.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.x 或 2 中的内容.12.x