2011-10-17 72 views
43

我有一個庫被編譯成一個在倉庫上不可用的jar(不是sbt項目,沒有源代碼,只是jar文件)。如何將jar發佈到本地存儲庫?

有沒有辦法在本地發佈jar,所以我可以使用libraryDependencies += "org.xxx" % "xxx" % "1.0"表示法添加依賴項? (我已經知道如何將其複製到lib文件夾中的文件添加到項目中。)

+0

這是一個非常有趣的問題,因爲我幾乎看不到任何不期望項目的任務(除了'about')。人們可以想到一個你會在全球範圍內註冊的插件,並使用它來將jar發佈到本地的Ivy倉庫。我知道沒有插件可以做到這一點。 –

回答

2

這裏是一個博客帖子我也跟着推SBT神器到Maven倉庫(本地和遠程)幾個月前。

http://brizzled.clapper.org/id/100/

+0

謝謝,但我已經知道如何將一個sbt項目發佈到我的本地存儲庫。我問的是如何將一個現有的jar文件添加到我的本地存儲庫。你知道如何做到這一點? –

44

發佈本地動作用於您的項目發佈到本地常春藤庫。默認情況下,此本地存儲庫位於$ {user.home} /。ivy2/local中。然後,您可以在同一臺機器上使用該項目從其他項目source

編輯:對不起,我誤解了你的問題。這裏是一個example發佈一個罐子或來源到您當地的常春藤回購。

+1

沒錯,但這不是一個項目,它是一個jar文件。我該怎麼做呢? –

-1

我創建,創建一個本地資源庫的樣本播放框架/ SBT項目(不只是publish-local)位置:https://github.com/muymoo/local-ivy-repo-sbt 具體看Build.scala

makeLocalRepoSettings(publishedProjects):_*

localRepoArtifacts += "org.apache.ws.security" % "wss4j" % "1.6.9"

這些localRepoArtifacts在我本地的常春藤回購中找到,但我認爲你可以編輯th也是使用普通的舊jar文件。

運行:play local-repository-created

這是https://github.com/sbt/sbt-remote-control一個簡單的版本,它做了很多更多他們Build.scala

18

tl; dr我會把它稱爲一個技巧而不是sbt的一個特徵。你已被警告。

假設您已有file.jar發佈。至於任何構建工具,包括它的執行任務最終都會在項目中的文件之外創建工件(大多數情況下爲jar文件)。

該項目設置座標爲工件。

訣竅是利用什麼SBT需要建立環境(= 座標)的罐子出版(否則你必須指定它們在命令行中,可能會或可能不會非常用戶友好)。

創建必要設置一個build.sbt - organizationnameversion和可能scalaVersion - 並將其保存在jar文件。

organization := "org.abc" 

name := "my-own-publish-jar" 

version := "1.0.0" 

scalaVersion := "2.11.3" 

packageBin in Compile := file(s"${name.value}_${scalaBinaryVersion.value}.jar") 

您可能已經注意到,構建將compile:package任務更改爲指向jar文件。

就是這樣。

執行sbt publishLocal並且該jar文件應位於Ivy2本地存儲庫中,即~/.ivy2/local/org.abc/my-own-publish-jar_2.11/1.0.0/jars/my-own-publish-jar_2.11.jar

protip編寫一個插件,使用命令行上指定的座標來完成它,現在應該很容易。

+2

爲什麼這不是公認的答案? –

+0

這對我有用。我不得不放棄'_ $ {scalaBinaryVersion.value}'來實現我的特定目標,但否則這就是解決方案。 – reverend

+0

是的,對於不需要Scala版本的Java JAR,您可以設置'crossPaths:= false'來刪除它 - 但是,當Scala二進制兼容性不成問題時,它只能用於本地構建。 –

3

比方說,你有wetElephant.jarwetElephant-javadoc.jar文件的一些第三方庫,並要發佈到本地回購和使用libraryDependencies SBT taskKey另一個項目referrence它相應的javadoc。

以下是您需要做的事情。

  1. 把你的庫(wetElephant.jarwetElephant-javadoc.jar)爲modules\wetElephant
  2. build.sbt文件中定義的項目(或Build.scala文件)

    lazy val stolenLib = project 
        .in(file("modules/wetElephant")) 
        .settings(
        organization    := "com.stolenLibs", 
        name      := "wetElephant", 
        version     := "0.1-IDonKnow", 
        crossPaths    := false, //don't add scala version to this artifacts in repo 
        publishMavenStyle   := true, 
        autoScalaLibrary   := false, //don't attach scala libs as dependencies 
        description    := "project for publishing dependency to maven repo, use 'sbt publishLocal' to install it", 
        packageBin in Compile  := baseDirectory.value/s"${name.value}.jar", 
        packageDoc in Compile  := baseDirectory.value/s"${name.value}-javadoc.jar" 
    ) 
    
  3. 呼叫publishLocal任務來自sbt/activator(我是從激活者開始的,並以預設名稱作爲前綴):

    ./activator wetElephant/publishLocal     
    

...和讀取輸出,看看哪些地方出版:

/cygdrive/d/devstation-workspace/projects/m4l-patches 1 
     [info] Loading project definition from D:\devstation-workspace\projects\m4l-patches\project 
     [info] Set current project to m4l-patches (in build file:/D:/devstation-workspace/projects/m4l-patches/) 
     [info] Updating {file:/D:/devstation-workspace/projects/m4l-patches/}wetElephant... 
    [info] Packaging D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow-sources.jar ... 
    [info] Done packaging. 
    [info] Wrote D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\wetelephant-0.1-IDonKnow.pom 
     [info] Resolving org.fusesource.jansi#jansi;1.4 ...4 .... 
    [info] Done updating. 
    [info] :: delivering :: com.stolenLibs#wetelephant;0.1-IDonKnow :: 0.1-IDonKnow :: release :: Sun Dec 20 20:09:24 CET 2015 
     [info] delivering ivy file to D:\devstation-workspace\projects\m4l-patches\modules\wetElephant\target\ivy-0.1-IDonKnow.xml 
     [info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\poms\wetelephant.pom 
     [info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\jars\wetelephant.jar 
     [info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\srcs\wetelephant-sources.jar 
     [info] published wetelephant to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\docs\wetelephant-javadoc.jar 
     [info] published ivy to C:\Users\pawell\.ivy2\local\com.stolenLibs\wetelephant\0.1-IDonKnow\ivys\ivy.xml 
     [success] Total time: 1 s, completed 2015-12-20 20:09:24 
  • 可選在另一個項目中使用這些庫

    libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow" 
    
  • 聲明:我不知道如何不發佈消息來源...

    +0

    這不起作用。 scala版本始終爲2.10,版本始終爲0.1.snapshot。 –

    相關問題