我有一个sbt
项目,包含2个不同版本的play子项目(基本上是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项目时,Scala 2.10仍然无法解决play插件2.8。
sbt (play_2.3_subproject/*:更新)。ResolveException:未解决的依赖:2.8.7: not found
你明白了,我想在两个游戏项目之间切换,并为每个子项目启用适当的插件版本。
这首先是可能的吗?如果是,我怎样才能达到期望的行为?注意我使用的是sbt 0.13。
从评论中总结讨论,这可能是不可能的。例如,困难之一是在build.sbt
中启用PlayScala
。如/build.sbt
文件(版本2.8)或自动插件和插件设置(版本2.3)中所述,在这两个版本中,您都可以启用插件:
lazy val root = (project in file(".")).enablePlugins(PlayScala)
当PlayScala
在两个版本中都定义为play.sbt.PlayScala
时
话虽如此,即使可以构建这样的结构,它也很难维护,因为在Play 2.3和Play 2.8之间有突破性的变化,详见:
- Play 2.4迁移指南 Play 2.6迁移指南Play 2.7迁移指南Play 2.8迁移指南
升级Play版本的最佳方法是一次性完成。一次将Scala、Play和sbt全部升级到最新版本。这可能会花费更少的时间,然后弄清楚如何在同一个项目中同时播放两个版本。
对于将来的维护,最好是在新版本出现后进行升级。这样你就不需要做太多的改变来保持它。此外,您还可以获得最新的更新,其中通常包括安全漏洞修复、性能改进和错误修复,以及新功能。