Build.scala,%和%%符号含义


155

我是新手!Framework 2.1(Java版本),没有使用scala的经验。我不明白Build.scala中的含义%%%含义。我用谷歌搜索了它们,但找不到它们的含义。

在我的Build.scala文件中,我有:

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

为什么第一行使用单个百分比符号,第二行使用两个百分比符号%%?他们是干什么的?

Answers:


184

根据官方文档:

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

通过获取正确的Scala版本 %%

如果你使用groupID %% artifactID % revision的不是groupID % artifactID % revision(不同的是双%%groupID),SBT将增加项目的斯卡拉版本的工件名称。这只是捷径。

您可以编写以下代码%%

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

假设scalaVersion您的构建为2.9.1,则以下内容相同:

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

如上所示,如果使用%%,则不必指定版本。


2
“您项目的Scala版本”表示SettingKey的值scalaVersion
Gordon Gustafson

4
我认为我的其他问题不需要提出一个单独的SO问题:我什么时候不想使用%%?对我来说,它看起来像是“更好”,应始终使用....
PeterPerháč16年

10
@PeterPerháč不能%%与不包含Scala版本的工件(例如纯Java库)一起使用。
Toxaris

25

这是SBT的一部分,SBT用作构建工具。具体来说,这是一个导入语句。

百分号%实际上是一种用于建立依赖关系的方法。双百分号%%将注入当前的Scala版本-这使您可以为正在运行的scala版本获取正确的库。这是为了避免在更新Scala时不得不更改构建文件。

更多信息在这里

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.