2013-07-04 92 views
92

我是Play新玩家! Framework 2.1(java版本)并没有scala的经验。我不明白什么是什么%%%在Build.scala中的含义。我搜索了他们,但找不到他们的意思。Build.scala,%和%%符号含义

在我Build.scala文件我有:

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

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

回答

114

从官方文档:

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

获得正确的斯卡拉版本%%

如果使用groupID %% artifactID % revision代替groupID % artifactID % revision(差别是双重的e %% groupID),SBT会将您的项目的Scala版本添加到工件 的名称。这只是一条捷径。

你可以不%%这样写:

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" 
) 

正如你可以在上面看到,如果你使用%%,则不必指定 版本。

+1

“您的项目的Scala版本”表示SettingKey'scalaVersion'的值。 –

+1

不认为提出一个单独的SO问题是需要我的另一个问题:我什么时候不会想使用%%?对我来说,它看起来像'更好',应该始终使用...... –

+3

@PeterPerháč你不能对不包含Scala版本的工件(如纯Java库)使用'%%'。 – Toxaris

17

这是作为构建工具使用的SBT的一部分。具体而言,这是一条重要声明。

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

更多信息here