如何发布jar到本地存储库?

我有一个库编译到一个库中不可用的jar(不是一个sbt项目,没有源代码,只是jar文件)。

有没有办法在本地发布的jar,所以我可以添加依赖使用libraryDependencies += "org.xxx" % "xxx" % "1.0"表示法? (我已经知道如何通过将文件复制到lib文件夹来将文件添加到项目中。)

发布 – 本地操作用于将您的项目发布到本地Ivy存储库。 默认情况下,本地存储库位于$ {user.home} /。ivy2 / local中。 然后,您可以在同一机器源上的其他项目中使用此项目

编辑:对不起,我误解了你的问题。 这里是一个例子来发布一个jar子或来源到您当地的常春藤回购。

tl;博士我把它称为一个技巧,而不是sbt的function。 你已经被警告过了。

假设你已经有了file.jar来发布。 与任何构build工具一样,sbt包括,它将执行最终在项目中的文件之外创build工件(大多数情况下为jar文件)的任务。

该项目设置工件的坐标

诀窍是利用所需的设置环境 (= 坐标 )来发布jar(否则你必须在命令行中指定它们,可能会或可能不是非常用户友好的)。

使用必要的设置( organizationnameversion和可能的scalaVersion创build一个build.sbt ,并将其保存在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") 

您可能已经注意到,构build更改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编写一个插件来执行命令行上指定的坐标应该是相当容易的。

假设您有wetElephant.jarwetElephant-javadoc.jar文件,您需要将一些第三方库和相应的javadoc发布到本地libraryDependencies并使用libraryDependencies sbt taskKey从另一个项目中引用

这是你需要做的。

  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. 从sbt / activator调用publishLocal任务(我是从激活器中完成的,并以proejct名称作为前缀):

     ./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 
  1. 可以在另一个项目中使用这些库

     libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow" 

免责声明:我不知道如何不发布消息来源…

下面是一篇博客文章,几个月前,我把它推到了Maven仓库(本地和远程)。

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

我创build了一个示例Play Framework / sbt项目,在这里创build一个本地存储库(不只是publish-local ): https : //github.com/muymoo/local-ivy-repo-sbt特别看Build.scala

makeLocalRepoSettings(publishedProjects):_*

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

这些localRepoArtifacts在我的本地常春藤回购中find,但我认为你可以编辑这个工作与普通的旧jar文件以及。

运行: play local-repository-created

这是一个简单的https://github.com/sbt/sbt-remote-control版本,在;Build.scala做了很多。