如何解决SBT 多项目构建:针对不同子项目的 2 个不同版本的 sbt play 插件
我有一个 sbt
项目,其中包含 2 个 play 子项目,其中包含 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 plugin 2.8 问题。
(play_2.3_subproject/*:update) sbt.ResolveException: 未解决的依赖项: com.typesafe.play#play-server_2.10;2.8.7:未找到
你明白了,我想在两个 play 项目之间切换,并为每个子项目启用适当的插件版本。
这可能吗?如果是,我怎样才能实现所需的行为? 注意我使用的是 sbt 0.13。
解决方法
从评论中总结讨论,可能是不可能的。例如,困难之一是在 PlayScala
中启用 build.sbt
。如 The /build.sbt
file (version 2.8) 或 Auto Plugins and plugin settings (version 2.3) 中所述,在两个版本中都启用插件:
lazy val root = (project in file(".")).enablePlugins(PlayScala)
当 PlayScala
在两个版本中都定义在 play.sbt.PlayScala
时。
话虽如此,即使可以构建这样的结构,也很难维护,因为 Play 2.3 和 Play 2.8 之间存在重大变化,详细说明如下:
- Play 2.4 Migration Guide
- Play 2.5 Migration Guide
- Play 2.6 Migration Guide
- Play 2.7 Migration Guide
- Play 2.8 Migration Guide
为了升级 Play 版本应该采取的最佳方法是一次性完成。将 Scala、Play 和 sbt 一次性升级到最新版本。与弄清楚如何在同一项目中拥有两个 Play 版本相比,可能需要更少的时间。
对于未来的维护,最好是在新版本发布后进行升级。这样你就不必做太多的改变来保持它。此外,您可以获得最新的更新,其中通常包括安全漏洞修复、性能改进和错误修复以及新功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。