SBT 多项目构建:针对不同子项目的 2 个不同版本的 sbt play 插件

SBT multi-project build : 2 different versions of sbt play plugin for different subprojects

我有一个 sbt 项目,其中包含 2 个播放子项目和 2 个不同版本的播放(基本上是 2 个不同版本的 Scala:2.12 和 2.10)。有没有办法使用两个版本的播放插件? 这是我的 plugins.sbt:

resolvers += "Typesafe repository" at "https://repo.typesafe.com/typesafe/releases/"
resolvers += "scalaz-bintray" at "https://dl.bintray.com/scalaz/releases"

resolvers += "Akka Snapshot Repository" at "https://repo.akka.io/snapshots/"
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.8.7") 
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.3.7") 

这是build.sbt:

lazy val global = Project("root",file("."))

lazy val play28 = Project( "play_2.8_subproject" , file("subs/ply28/")).settings(
  libraryDependencies ++= Seq( jdbc , ehcache , ws , specs2 % Test , guice ),
  scalaVersion := "2.12.2"
).enablePlugins(PlayScala)

lazy val play23 = Project( "play_2.3_subproject" , file("subs/pl23/")).settings(
  scalaVersion := "2.10.5",
  libraryDependencies ++= Seq( jdbc  , ws  )  
).enablePlugins(PlayScala)

我可以运行 play 2.8 子项目。然而,当尝试 运行 play 2.3 项目时,play plugin 2.8 仍然没有用 Scala 2.10 解决。

(play_2.3_subproject/*:update) sbt.ResolveException: unresolved dependency: com.typesafe.play#play-server_2.10;2.8.7: not found

你明白了,我想在两个播放项目之间切换,并为每个子项目启用合适的插件版本。

首先这可能吗?如果是,我怎样才能实现所需的行为? 注意我使用的是 sbt 0.13.

从评论中总结讨论,大概是不可能的。例如,困难之一是在 build.sbt 中启用 PlayScala。如 The /build.sbt file (version 2.8) or at Auto Plugins and plugin settings (version 2.3) 中所述,在两个版本中都启用插件:

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

当在两个版本中 play.sbt.PlayScala 定义了 PlayScala

话虽如此,即使可以构建这样的结构,也很难维护,因为 Play 2.3 和 Play 2.8 之间存在重大变化,详见:

升级 Play 版本应采用的最佳方法是一次性完成。立即将 Scala、Play 和 sbt 升级到最新版本。弄清楚如何在同一个项目中同时拥有两个 Play 版本可能会花费更少的时间。

为了将来的维护,最好是在有新版本时升级。这样你就不必做太多的改变来保持它。此外,您可以获得最新的更新,其中通常包括安全漏洞修复、性能改进和错误修复,以及新功能。