Specs2没有在其URL中定义SBT版本:https://oss.sonatype.org/content/repositories/releases/org/specs2/specs2_2.9.2/1.12.3/
在尝试解决时,这会导致SBT出现问题......
[warn] ==== sonatype-snapshots: tried
[warn] https://oss.sonatype.org/content/repositories/snapshots/org/specs2/specs2_2.9.2_0.12/1.12.3/specs2-1.12.3.pom
[warn] ==== sonatype-releases: tried
[warn] https://oss.sonatype.org/content/repositories/releases/org/specs2/specs2_2.9.2_0.12/1.12.3/specs2-1.12.3.pom
Run Code Online (Sandbox Code Playgroud)
如何让SBT解析正确的URL?
specs2不是sbt插件,它是用于编写可执行软件规范的Scala库.
有两个级别的sbt项目.您自己的项目(现在称之为"应用程序")和构建项目定义本身(称之为"构建").
当应用程序在编译或测试期间使用其他库时,它们被称为库依赖项(或简称"deps").这些deps在build.sbt(*.sbt或project/*.scala)中声明如下:
libraryDependencies += "org.specs2" %% "specs2" % "2.2" % "test"
Run Code Online (Sandbox Code Playgroud)
通过说%%,使用sbt发布的工件会自动附加Scala二进制版本后缀,例如_2.10在Maven上.这是因为(与Java不同)并非所有Scala版本都是二进制兼容的.斯卡拉2.9.1和2.9.2不兼容,所以它们都具有不同的后缀_2.9.1和_2.9.2,但斯卡拉2.10.x所有系列中兼容,所以给他们_2.10.
但遗憾的是,Scala版本需要不同版本的Specs2,您可能需要执行以下操作:
libraryDependencies <+= scalaVersion({
case "2.9.2" => "org.specs2" %% "specs2" % "1.12.3" % "test"
case x if x startsWith "2.10" => "org.specs2" %% "specs2" % "2.2" % "test"
})
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请查看"入门指南".
构建可以依赖于特殊类型的库来扩展其功能,并且它们是sbt插件.这些在project/plugins.sbt(或project/*.sbt)中声明如下:
addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.2.5")
Run Code Online (Sandbox Code Playgroud)
由于sbt插件依赖于sbt版本和构建使用的Scala版本,因此这两种信息都以某种方式编码到已发布的工件路径中.在Ivy上,它们表示为文件夹名称,但在Maven上它们表示为后缀: