【问题标题】:what are the ways of declaring dependencies in sbtsbt中声明依赖的方式有哪些
【发布时间】:2015-01-08 01:54:13
【问题描述】:

在 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、异常、缓存、ws)?还有其他方式来声明依赖关系吗?

【问题讨论】:

  • 它们只是从 play sbt 插件中导入的 val,其制作方式与val jdbc = "com.typesafe.play" %% "play-jdbc" % "2.3.7" 相同(实际上是用另一个函数制作的,但相同)。
  • 如何从之前定义的插件中找到这些值

标签: scala playframework-2.0 sbt


【解决方案1】:

这些都是同一种方法的示例。 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 库很有用,因为它们通常针对不同版本的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 等。

【讨论】:

  • 查看我的构建文件,我看不到那些定义的 val。但是,正如@m-z 所提到的,这些只是从 sbt-plugin 导入的。如果是,我怎么知道所有这些以前定义的 val?
  • 通过阅读文档。例如,在 WS 文档中,它告诉您添加“ws”依赖项:playframework.com/documentation/2.3.x/ScalaWS。此外,所有这些键都在此处定义:github.com/playframework/playframework/blob/master/framework/…。可以看到val ws = component("play-ws"),然后def component(id: String) = "com.typesafe.play" %% id % play.core.PlayVersion.current
猜你喜欢
  • 2016-06-09
  • 2011-10-15
  • 1970-01-01
  • 2016-11-23
  • 1970-01-01
  • 2014-09-04
  • 1970-01-01
  • 1970-01-01
  • 2019-01-24
相关资源
最近更新 更多