如何发布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(否则你必须在命令行中指定它们,可能会或可能不是非常用户友好的)。
使用必要的设置( organization
, name
, version
和可能的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.jar
和wetElephant-javadoc.jar
文件,您需要将一些第三方库和相应的javadoc发布到本地libraryDependencies
并使用libraryDependencies
sbt taskKey从另一个项目中引用它 。
这是你需要做的。
- 把你的图书馆(
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" )
-
从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
-
可以在另一个项目中使用这些库
libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow"
免责声明:我不知道如何不发布消息来源…
下面是一篇博客文章,几个月前,我把它推到了Maven仓库(本地和远程)。
我创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
做了很多。