Símbolos Build.scala,% e %% significando

155

Eu sou novo no Play! Framework 2.1 (versão java) e não possui experiência com o scala. Eu não entendo o que é eo que faz %e %%significa em Build.scala. Eu pesquisei sobre eles, mas não consegui encontrar seu significado.

No meu arquivo Build.scala eu tenho:

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

Por que a primeira linha usa um único símbolo de% e a segunda linha usa dois símbolos de porcentagem %%? Para que servem?

Franco
fonte

Respostas:

184

A partir da documentação oficial:

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

Obtendo a versão correta do Scala com %%

Se você usar em groupID %% artifactID % revisionvez de groupID % artifactID % revision(a diferença é o dobro %%após groupID), o SBT adicionará a versão Scala do seu projeto ao nome do artefato. Este é apenas um atalho.

Você pode escrever isso sem o %%:

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

Supondo que a scalaVersionsua construção seja 2.9.1, o seguinte é idêntico:

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

Como você pode ver acima, se você usar %%, não precisará especificar a versão.

Mingyu
fonte
2
"Versão Scala do seu projeto" significa o valor da SettingKey scalaVersion.
Gordon Gustafson
4
não pense que é necessário fazer uma pergunta SO separada para minha pergunta adicional: quando eu não gostaria de usar %%? Para mim, parece que é 'melhor' e deve ser usado sempre ....
Peter Perháč
10
@ PeterPerháč você não pode usar %%com artefatos que não contêm uma versão Scala (como bibliotecas Java puras).
Toxaris 27/10/16
25

Isso faz parte do SBT, que o play usa como ferramenta de construção. Especificamente, esta é uma declaração de importação.

O símbolo de porcentagem %é realmente um método usado para criar dependências. O sinal de porcentagem duplo %%injeta a versão atual do Scala - isso permite que você obtenha a biblioteca correta para a versão do scala que está executando. Isso evita a necessidade de alterar o arquivo de compilação ao atualizar o Scala.

Mais informações aqui

Boris, a Aranha
fonte