Build.scala, makna simbol% ​​dan %%

155

Saya baru bermain! Kerangka 2.1 (versi java) dan tidak memiliki pengalaman dengan scala. Saya tidak mengerti apa itu dan apa artinya %dan %%artinya di Build.scala. Saya mencari informasi tentang mereka tetapi tidak dapat menemukan artinya.

Dalam file Build.scala saya, saya punya:

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

Mengapa baris pertama menggunakan simbol% ​​tunggal dan yang kedua menggunakan simbol dua persen %%? Untuk apa mereka?

Franco
sumber

Jawaban:

184

Dari dokumentasi resmi:

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

Mendapatkan versi Scala yang tepat dengan %%

Jika Anda menggunakan groupID %% artifactID % revisionalih-alih groupID % artifactID % revision(perbedaannya adalah ganda %%setelah groupID), SBT akan menambahkan versi Scala proyek Anda ke nama artefak. Ini hanya jalan pintas.

Anda dapat menulis ini tanpa %%:

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

Dengan asumsi scalaVersionbuild Anda adalah 2.9.1, yang berikut ini identik:

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

Seperti yang Anda lihat di atas, jika Anda menggunakan %%, Anda tidak harus menentukan versi.

Mingyu
sumber
2
"Versi Scala proyek Anda" berarti nilai dari SettingKey scalaVersion.
Gordon Gustafson
4
tidak perlu mengajukan pertanyaan SO terpisah untuk pertanyaan tambahan saya: kapan saya tidak ingin menggunakan %%? Bagi saya sepertinya itu 'lebih baik' dan harus selalu digunakan ....
Peter Perháč
10
@ PeterPerháč Anda tidak dapat menggunakan %%dengan artefak yang tidak mengandung versi Scala (seperti perpustakaan Java murni).
Toxaris
25

Ini adalah bagian dari SBT yang digunakan bermain sebagai alat build. Khususnya ini adalah pernyataan impor.

Simbol persen %sebenarnya adalah metode yang digunakan untuk membangun dependensi. Tanda dua persen %%menyuntikkan versi Scala saat ini - ini memungkinkan Anda untuk mendapatkan perpustakaan yang benar untuk versi scala yang Anda jalankan. Ini untuk menghindari keharusan mengubah file build Anda ketika Anda memperbarui Scala.

Informasi lebih lanjut di sini

Boris the Spider
sumber