Znaczenie symboli Build.scala,% i %%

155

Jestem nowy w grze! Framework 2.1 (wersja java) i nie mam doświadczenia ze scala. Nie rozumiem, co to jest, co oznacza %i %%oznacza w Build.scala. Poszukałem ich w Google, ale nie mogłem znaleźć ich znaczenia.

W moim pliku Build.scala mam:

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

Dlaczego w pierwszym wierszu używany jest pojedynczy symbol%, a w drugim dwa symbole procentu %%? Do czego służą?

Franco
źródło

Odpowiedzi:

184

Z oficjalnej dokumentacji:

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

Uzyskanie odpowiedniej wersji Scala z %%

Jeśli użyjesz groupID %% artifactID % revisionzamiast groupID % artifactID % revision(różnica jest podwójna %%po groupID), SBT doda wersję Scala twojego projektu do nazwy artefaktu. To tylko skrót.

Możesz to napisać bez %%:

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

Zakładając, że scalaVersiondla Twojej kompilacji jest to 2.9.1, co następuje:

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

Jak widać powyżej, jeśli używasz %%, nie musisz określać wersji.

Mingyu
źródło
2
„Wersja Scala Twojego projektu” oznacza wartość klucza SettingKey scalaVersion.
Gordon Gustafson,
4
nie sądzę, że zadawanie osobnego pytania SO jest wymagane w przypadku mojego dodatkowego pytania: kiedy nie chciałbym używać %%? Dla mnie wygląda na to, że jest „lepszy” i powinien być używany zawsze ....
Peter Perháč
10
@ PeterPerháč nie można używać %%z artefaktami, które nie zawierają wersji Scala (np. Czyste biblioteki Java).
Toxaris
25

Jest to część SBT, której gra używa jako narzędzia do budowania. W szczególności jest to instrukcja importu.

Symbol procentu %jest w rzeczywistości metodą używaną do budowania zależności. Podwójny znak procentu %%powoduje wstrzyknięcie aktualnej wersji Scali - pozwala to na pobranie odpowiedniej biblioteki dla używanej wersji scali. Ma to na celu uniknięcie konieczności zmiany pliku kompilacji podczas aktualizacji Scali.

Więcej informacji tutaj

Pająk Boris
źródło