2015-01-07 2 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

Они просто Vals импортирован из плагина play sbt, который делается таким же образом: «val jdbc =» com.typesafe.play «%%» play-jdbc «%» 2.3.7 "' (фактически сделанный с anot ее функции, но то же самое). –

+0

Как я мог найти эти vals из ранее определенных плагинов – surenyonjan

ответ

3

Это все примеры одного и того же подхода. libraryDependencies ключ несет последовательность артефактов, каждый из которых определен как

groupID % artifactID % revision % configuration 

в большинстве случаев, минуя дополнительный configuration, который обычно используется для ограничения зависимостей, которые будут добавлены к "test" только объем.

Если вы хотите объявить индивидуальную зависимость, то есть

libraryDependencies += single 

Если у вас есть несколько, то, как правило, добавить их в виде пакета в последовательности:

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

В вашем последнем примере, jdbc, anorm и т. Д. Ранее были определены выше, поэтому вы просто ссылаетесь на эти ранее существовавшие значения. Вы также можете сделать это сам:

lazy val myDep = groupID % artifactID % revision 

libraryDependencies += myDep 

Объединяет groupID и artifactID, существует специальный оператор %% вместо %, который полезен для библиотек Scala, потому что они часто скомпилированы с разными версиями Scala, таким как 2.10 и 2,11. Значение %% означает, что версия Scala добавляется к artifactID, опираясь на это общее соглашение. То есть

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

Равен

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

, если Scala версия вашего проекта является 2,11, или

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

, если ваша версия Scala является 2,10 и т.д.

+0

Просмотрев мои файлы сборки, я не мог видеть, что эти vals определены. Но, однако, как упоминал @ m-z, они просто импортируются из sbt-plugin. Если да, то как я мог знать все эти ранее определенные валы? – 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 component (id: String) = "com.typesafe.play" %% id% play.core.PlayVersion.current –

Смежные вопросы