2013-01-15 65 views
8

當SBT試圖publish-local,我得到下面的輸出:SBT發佈地方:未定義解析器「本地」

[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再次工作?

回答

11

我們發現這個問題是通過覆蓋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) 

另一種解決方案是不覆蓋externalResolvers只是禁用Maven的中央。

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

一旦你publish-local,常春藤似乎優先考慮本地快照版本在遠程快照版本。要讓您的已發佈工件由另一個項目拾取,只需在該項目中運行sbt compile(看起來好像不需要sbt update)。

http://www.scala-sbt.org/release/docs/Detailed-Topics/Library-Management.html

+2

見您可能也有興趣在用戶級重載庫:http://www.scala-sbt.org/release/docs/Detailed-Topics/Proxy-Repositories.html。 –