4

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

SBT で正しい URL を解決するにはどうすればよいですか?

4

1 に答える 1

5

specs2 は sbt プラグインではなく、実行可能なソフトウェア仕様を記述するための Scala ライブラリです

sbt プロジェクトには 2 つのレベルがあります。独自のプロジェクト (ここでは「アプリ」と呼びます) とビルド プロジェクト定義自体 (「ビルド」と呼びます)。

ライブラリの依存関係

アプリがコンパイルまたはテスト中に他のライブラリを使用する場合、それらはライブラリの依存関係 (または略して「deps」) と呼ばれます。これらの依存関係は、build.sbt(または*.sbtまたはproject/*.scala) で次のように宣言されます。

libraryDependencies += "org.specs2" %% "specs2" % "2.2" % "test"

ということで、sbt を使って公開されたアーティファクトは、Maven%%などの Scala バイナリ バージョンの postfix を自動的に追加します。_2.10これは、(Java とは異なり) すべての Scala リリースが互いにバイナリ互換性があるわけではないという事実によるものです。Scala 2.9.1 と 2.9.2 は互換性がないため、両者には異なる接尾辞_2.9.1_2.9.2がありますが、Scala 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"
})

詳細については、入門ガイドをご覧ください。

sbt プラグイン

ビルドがその機能を拡張するために依存できる特別なタイプのライブラリがあり、それらは sbt プラグインです。これらはproject/plugins.sbt(またはproject/*.sbt) で次のように宣言されます。

addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.2.5")

sbt プラグインは sbt のバージョンとビルドが使用する Scala のバージョンに依存するため、これらの情報は両方とも公開されたアーティファクト パスに何らかの方法でエンコードされます。Ivy ではフォルダー名として表現されますが、Maven では接尾辞として表現されます。

于 2013-09-09T01:50:21.110 に答える