2015-01-07 66 views
0

在sbt文檔中,他們提到了聲明項目依賴關係的不同方式。什麼是在sbt中聲明依賴關係的方法

libraryDependencies += groupID % artifactID % revision

libraryDependencies += groupID % artifactID % revision % configuration

libraryDependencies ++= Seq(
    groupID %% artifactID % revision, 
    groupID %% otherID % otherRevision 
) 

然而,當我創建了新的Play2框架:

activator new HelloWorld play-scala 

我可以看到build.sbt下面的代碼:

libraryDependencies ++= Seq(
jdbc, 
anorm, 
cache, 
ws 
) 

它們如何解析(jdbc,anorm,cache,ws)?還有其他的方式來聲明依賴關係嗎?

+1

他們只是瓦爾斯進口從播放sbt插件,這是做同樣的方式'val jdbc =「com.typesafe.play」%%「play-jdbc」%「2.3.7」'(實際上用anot她的功能,但它是一樣的)。 –

+0

如何從先前定義的插件中找到這些val – surenyonjan

回答

3

這些都是同一種方法的所有示例。所述libraryDependencies鍵攜帶工件的序列,其中的每一個被定義爲

groupID % artifactID % revision % configuration 

在大多數情況下省略其通常用於限制依賴可選configuration到被添加到僅"test"範圍。

如果要聲明一個單獨依賴,你有

libraryDependencies += single 

如果您有多個時,通常他們在一個序列添加爲一個批次:

libraryDependencies ++= Seq(first, second, third) 

在你的最後一個例子, jdbcanorm等已被定義如上,所以你只是指這些預先存在的值。你也可以這樣做你自己:

lazy val myDep = groupID % artifactID % revision 

libraryDependencies += myDep 

要連接groupIDartifactID,有一個特殊的操作%%,而不是%,因爲他們往往是在不同版本的Scala編譯這是斯卡拉庫有用的,如2.10和2.11。 %%意味着Scala版本被附加到artifactID,依靠這個通用約定。即

"com.foo" %% "bar" % "1.0" 

等於

"com.foo" % "bar_2.11" % "1.0" 

如果你的項目的斯卡拉版本是2.11,或

"com.foo" % "bar_2.10" % "1.0" 

如果你的Scala版本是2.10,等等

+0

查看我的構建文件,我看不到那些定義的val。但是,正如@ m-z所提到的,這些只是從sbt-plugin導入的。如果是的話,我怎麼能知道所有這些以前定義的vals? – surenyonjan

+0

通過閱讀文檔。例如,在WS文檔中,它會告訴您添加「ws」依賴項:https://www.playframework.com/documentation/2.3.x/ScalaWS。此外,所有這些鍵都在這裏定義:https://github.com/playframework/playframework/blob/master/framework/src/sbt-plugin/src/main/scala/PlayImport.scala#L14。你可以看到val ws = component(「play-ws」),然後def組件(id:String)=「com.typesafe.play」%% id%play.core.PlayVersion.current –

相關問題