J'ai un projet sbt contenant 2 sous-projets de lecture avec 2 versions différentes de play (et essentiellement 2 versions différentes de Scala: 2.12 et 2.10). Existe-t-il un moyen d'utiliser deux versions du plugin play? Voici mon 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") 

Et voici 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)

Je peux exécuter le sous-projet play 2.8. Néanmoins, play plugin 2.8 n'est toujours pas résolu avec Scala 2.10 lorsque vous essayez d'exécuter le projet play 2.3.

(play_2.3_subproject / *: update) sbt.ResolveException: dépendance non résolue: com.typesafe.play # play-server_2.10; 2.8.7: introuvable

Vous voyez l'idée, je veux basculer entre les deux projets de lecture et activer la version de plugin appropriée pour chaque sous-projet.

Est-ce possible en premier lieu? Si oui, comment puis-je obtenir le comportement souhaité? Remarque J'utilise sbt 0.13.

0
Helix112 25 févr. 2021 à 20:29

1 réponse

Meilleure réponse

Pour résumer la discussion à partir des commentaires, c'est probablement impossible. Une des difficultés par exemple est d'activer PlayScala dans build.sbt. Comme décrit dans Le /build.sbt fichier (version 2.8) ou à Plugins automatiques et paramètres du plugin (version 2.3), dans les deux versions, vous activez le plugin:

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

Lorsque PlayScala est défini à play.sbt.PlayScala dans les deux versions.

Cela dit, même s'il était possible de construire une telle structure, ce sera vraiment difficile à maintenir, car il y a des changements décisifs entre Play 2.3 et Play 2.8, comme expliqué dans:

La meilleure approche à adopter pour mettre à niveau la version Play est de le faire en une seule fois. Mettez à niveau Scala, Play et sbt en même temps vers les versions les plus récentes. Cela prendra probablement moins de temps que de déterminer comment avoir les deux versions de Play dans le même projet.

Pour la maintenance future, le mieux sera de mettre à niveau une fois qu'une nouvelle version sera disponible. De cette façon, vous n'avez pas à faire beaucoup de changements pour continuer. En outre, vous obtenez les dernières mises à jour qui incluent généralement des correctifs de vulnérabilités de sécurité, des améliorations de performances et des corrections de bogues, ainsi que de nouvelles fonctionnalités.

2
Tomer Shetah 13 mars 2021 à 09:45