13

sbtを実行しようとするとpublish-local、次の出力が得られます。

[info] :: delivering :: com.mycompany#util_2.9.1;0.1.0-SNAPSHOT :: 0.1.0-SNAPSHOT :: integration :: Tue Jan 15 11:23:01 CET 2013
[info]  delivering ivy file to /Users/martink/code/my-project/util/target/scala-2.9.1/ivy-0.1.0-SNAPSHOT.xml
[trace] Stack trace suppressed: run last my-util/*:publish-local for the full output.
[error] (my-util/*:publish-local) Undefined resolver 'local'

これは、publish-localが新しいプロジェクトで機能するため、ビルドファイルの設定が原因であると思われます。publish-local再び仕事をする方法について何かアイデアはありますか?

4

1 に答える 1

18

問題の原因がオーバーライドされていることがわかりましたexternal-resolvers

val myRepo = "my-public" at "http://my-nexus-server/content/groups/public/" 
externalResolvers := Seq(publicRepo)

これは、デフォルトのMaven中央リポジトリをリゾルバーから除外するために行いました。ただし、これにより、によって使用されるローカルリゾルバーも削除されましたpublish-local

解決策は、ローカルリゾルバーを追加し直すことでした。

val ivyLocal = Resolver.file("local", file(Path.userHome.absolutePath + "/.ivy2/local"))(Resolver.ivyStylePatterns)
externalResolvers := Seq(ivyLocal, myRepo)

別の解決策は、オーバーライドせずにMavenCentralexternalResolversを無効にすることです。

resolvers := Seq(myRepo)
externalResolvers <<= resolvers map { rs =>
  Resolver.withDefaultResolvers(rs, mavenCentral = false)
}

一度publish-local、Ivyは、リモートスナップショットバージョンよりもローカルスナップショットバージョンを優先するようです。公開したアーティファクトを別のプロジェクトで取得するsbt compileには、そのプロジェクトで実行するだけです(必要ないようsbt updateです)。

http://www.scala-sbt.org/release/docs/Detailed-Topics/Library-Management.htmlも参照してください。

于 2013-01-15T11:05:47.150 に答える