我有一個庫被編譯成一個在倉庫上不可用的jar(不是sbt項目,沒有源代碼,只是jar文件)。如何將jar發佈到本地存儲庫?
有沒有辦法在本地發佈jar,所以我可以使用libraryDependencies += "org.xxx" % "xxx" % "1.0"
表示法添加依賴項? (我已經知道如何將其複製到lib
文件夾中的文件添加到項目中。)
我有一個庫被編譯成一個在倉庫上不可用的jar(不是sbt項目,沒有源代碼,只是jar文件)。如何將jar發佈到本地存儲庫?
有沒有辦法在本地發佈jar,所以我可以使用libraryDependencies += "org.xxx" % "xxx" % "1.0"
表示法添加依賴項? (我已經知道如何將其複製到lib
文件夾中的文件添加到項目中。)
這裏是一個博客帖子我也跟着推SBT神器到Maven倉庫(本地和遠程)幾個月前。
謝謝,但我已經知道如何將一個sbt項目發佈到我的本地存儲庫。我問的是如何將一個現有的jar文件添加到我的本地存儲庫。你知道如何做到這一點? –
我創建,創建一個本地資源庫的樣本播放框架/ 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
。
tl; dr我會把它稱爲一個技巧而不是sbt的一個特徵。你已被警告。
假設您已有file.jar
發佈。至於任何構建工具,包括它的執行任務最終都會在項目中的文件之外創建工件(大多數情況下爲jar文件)。
該項目設置座標爲工件。
訣竅是利用什麼SBT需要建立環境(= 座標)的罐子出版(否則你必須指定它們在命令行中,可能會或可能不會非常用戶友好)。
創建必要設置一個build.sbt
- organization
,name
,version
和可能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編寫一個插件,使用命令行上指定的座標來完成它,現在應該很容易。
爲什麼這不是公認的答案? –
這對我有用。我不得不放棄'_ $ {scalaBinaryVersion.value}'來實現我的特定目標,但否則這就是解決方案。 – reverend
是的,對於不需要Scala版本的Java JAR,您可以設置'crossPaths:= false'來刪除它 - 但是,當Scala二進制兼容性不成問題時,它只能用於本地構建。 –
比方說,你有wetElephant.jar
和wetElephant-javadoc.jar
文件的一些第三方庫,並要發佈到本地回購和使用libraryDependencies
SBT taskKey另一個項目referrence它相應的javadoc。
以下是您需要做的事情。
wetElephant.jar
和wetElephant-javadoc.jar
)爲modules\wetElephant
在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"
)
呼叫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"
聲明:我不知道如何不發佈消息來源...
這不起作用。 scala版本始終爲2.10,版本始終爲0.1.snapshot。 –
這是一個非常有趣的問題,因爲我幾乎看不到任何不期望項目的任務(除了'about')。人們可以想到一個你會在全球範圍內註冊的插件,並使用它來將jar發佈到本地的Ivy倉庫。我知道沒有插件可以做到這一點。 –