Significado de los símbolos Build.scala,% y %%

155

Soy nuevo en Play! Framework 2.1 (versión java) y no tengo experiencia con scala. No entiendo lo que son y lo que %y %%significa en Build.scala. Busqué en Google pero no pude encontrar su significado.

En mi archivo Build.scala tengo:

"org.hibernate" % "hibernate-entitymanager" % "4.1.0.Final",
"com.typesafe" %% "play-plugins-mailer" % "2.1"

¿Por qué la primera línea usa un solo símbolo de% y la segunda usa dos símbolos de porcentaje %%? ¿Para qué son?

Franco
fuente

Respuestas:

184

De la documentación oficial:

http://www.playframework.com/documentation/2.1.1/SBTDependencies

Obtener la versión correcta de Scala con %%

Si usa en groupID %% artifactID % revisionlugar de groupID % artifactID % revision(la diferencia es el doble %%después de groupID), SBT agregará la versión Scala de su proyecto al nombre del artefacto. Esto es solo un atajo.

Podrías escribir esto sin el %%:

val appDependencies = Seq(
  "org.scala-tools" % "scala-stm_2.9.1" % "0.3"
)

Suponiendo que es scalaVersionpara su compilación 2.9.1, lo siguiente es idéntico:

val appDependencies = Seq(
  "org.scala-tools" %% "scala-stm" % "0.3"
)

Como puede ver arriba, si usa %%, no tiene que especificar la versión.

Mingyu
fuente
2
"Versión de Scala de su proyecto" significa el valor de SettingKey scalaVersion.
Gordon Gustafson
44
no piense que es necesario plantear una pregunta SO separada para mi pregunta adicional: ¿cuándo no querría usar %%? Para mí, parece que es 'mejor' y debería usarse siempre ...
Peter Perháč
10
@ PeterPerháč no se puede usar %%con artefactos que no contengan una versión Scala (como las bibliotecas Java puras).
Toxaris
25

Esto es parte de SBT que el juego usa como herramienta de construcción. Específicamente, esta es una declaración de importación.

El símbolo de porcentaje %es en realidad un método utilizado para construir dependencias. El doble signo de porcentaje %%inyecta la versión actual de Scala; esto le permite obtener la biblioteca correcta para la versión de scala que está ejecutando. Esto es para evitar tener que cambiar su archivo de compilación cuando actualiza Scala.

Más información aquí.

Boris la araña
fuente