Tengo un proyecto sbt que contiene 2 subproyectos de juego con 2 versiones diferentes de juego (y básicamente 2 versiones diferentes de Scala: 2.12 y 2.10). ¿Hay alguna forma de utilizar dos versiones del complemento de reproducción? Este es mi 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") 

Y este es 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)

Puedo ejecutar el subproyecto play 2.8. Sin embargo, el plugin de play 2.8 aún no se resuelve con Scala 2.10 al intentar ejecutar el proyecto de play 2.3.

(play_2.3_subproject / *: update) sbt.ResolveException: dependencia no resuelta: com.typesafe.play # play-server_2.10; 2.8.7: no encontrado

Entiendes la idea, quiero cambiar entre los dos proyectos de juego y habilitar la versión de complemento adecuada para cada subproyecto.

¿Es eso posible en primer lugar? Si es así, ¿cómo puedo lograr el comportamiento deseado? Tenga en cuenta que estoy usando sbt 0.13.

0
Helix112 25 feb. 2021 a las 20:29

1 respuesta

La mejor respuesta

Para resumir la discusión de los comentarios, probablemente sea imposible. Una de las dificultades, por ejemplo, es habilitar PlayScala en build.sbt. Como se describe en El archivo /build.sbt (versión 2.8) o en Complementos automáticos y configuración de complementos (versión 2.3), en ambas versiones habilita el complemento:

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

Cuando PlayScala se define en play.sbt.PlayScala en ambas versiones.

Dicho esto, incluso si fuera posible construir una estructura de este tipo, será realmente difícil de mantener, ya que hay cambios importantes entre Play 2.3 y Play 2.8, como se explica en:

El mejor enfoque que se debe tomar para actualizar la versión Play es hacerlo de una vez. Actualice Scala, Play y sbt de una vez a la última versión. Probablemente le llevará menos tiempo averiguar cómo tener ambas versiones de Play en el mismo proyecto.

Para el mantenimiento futuro, lo mejor será actualizar una vez que haya una nueva versión. De esta manera, no tendrá que hacer muchos cambios para mantener el ritmo. Además, obtiene las últimas actualizaciones que generalmente incluyen correcciones de vulnerabilidades de seguridad, mejoras de rendimiento y correcciones de errores, junto con nuevas funciones.

2
Tomer Shetah 13 mar. 2021 a las 09:45