2013-07-04 28 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