3

私の SBT ビルドでは、zip 依存関係 (以前は sbt-native-packager プラグインを使用してビルド) をフェッチし、bundle分類子を使用してローカルの Ivy リポジトリに公開しました。

しかし、Ivy リポジトリに依存関係のパスが必要です。それを (.zip でIO.unzip) 解凍し、そこにいくつかのファイルを入れて、sbt-native-packager で再パッケージ化するためです。

メソッドを使用しartifacts(...)てアーティファクトを見つけ、依存関係として追加しています。

"foo" % "bar" % "1.0-SNAPSHOT" artifacts(Artifact("bar-bundle", "zip", "zip", "bundle"))

しかし、その後、私は少し迷っています...

私はそれを見つけるために除外しようとしましdependencyClasspathた:

val bundleFile = taskKey[File]("bundle's path")

val settings = Seq(bundleFile <<= dependencyClasspath map { _ filter (_.endsWith(".zip"))})

問題は次のとおりです。どのクラスパスにもzip依存関係が見つかりません...何が間違っていますか?

sbt 0.13 を使用しています。

4

1 に答える 1

2

デフォルトでは、Zip ファイルはクラスパスにありません。含まれるアーティファクトのタイプは、によって構成されclasspathTypesます。次の方法で「zip」を追加できます。

classpathTypes += "zip"

に表示されdependencyClasspathます。

ただし、実際にはクラスパスに入れることが想定されていない場合は、更新レポートから直接引き出すことができます。

bundleFile := {
   val report: UpdateReport = update.value
   val filter = artifactFilter(name = "bar-bundle", extension = "zip")
   val all: Seq[File] = report.matching(filter)
   all.headOption getOrElse error("Could not find bar-bundle")
}

詳細については、 UpdateReportのドキュメントを参照してください。

于 2013-09-19T12:48:17.860 に答える