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

Sbt 如何将jar发布到本地存储库?,sbt,Sbt,我有一个编译成jar的库(不是sbt项目,没有源代码,只有jar文件),它在存储库中不可用 是否有办法在本地发布jar,以便我可以使用libraryDependencies+=“org.xxx”%“xxx”%“1.0”符号添加依赖项?(我已经知道如何通过将文件复制到lib文件夹将其添加到项目中。)尝试以下方法: 几个月前,我在一篇博客文章中将sbt工件推送到maven存储库(本地和远程) publishLocal操作用于将项目发布到本地常春藤存储库。默认情况下,此本地存储库位于${user.ho

我有一个编译成jar的库(不是sbt项目,没有源代码,只有jar文件),它在存储库中不可用

是否有办法在本地发布jar,以便我可以使用
libraryDependencies+=“org.xxx”%“xxx”%“1.0”
符号添加依赖项?(我已经知道如何通过将文件复制到
lib
文件夹将其添加到项目中。)

尝试以下方法:


几个月前,我在一篇博客文章中将sbt工件推送到maven存储库(本地和远程)


publishLocal操作用于将项目发布到本地常春藤存储库。默认情况下,此本地存储库位于${user.home}/.ivy2/local中。然后,您可以从同一台计算机上的其他项目中使用此项目


编辑:对不起,我误读了你的问题。下面是一个将jar或源发布到本地ivy repo的方法。

我创建了一个示例Play Framework/sbt项目,该项目创建了一个本地存储库(不仅仅是
发布本地
): 具体看一下
Build.scala


makeLocalRepoSettings(发布的项目):_*


localRepoArtifacts+=“org.apache.ws.security”%“wss4j”%“1.6.9”

这些
localrepo工件
可以在我的本地常春藤repo中找到,但我认为您也可以编辑它来处理普通的旧jar文件

要运行:
播放创建的本地存储库


这是一个更简单的版本,它在构建方面做得更多;dr我认为这是一个技巧,而不是sbt的特征。你已经被警告过了

假设您有
file.jar
要发布。和任何构建工具(包括sbt)一样,它执行的任务最终会从项目中的文件中创建工件(大多数情况下是jar文件)

项目设置工件的坐标

诀窍是利用sbt所需的设置要发布的jar的环境(=坐标)(否则您必须在命令行中指定它们,这可能对用户非常友好,也可能不友好)

使用必要的设置创建一个
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")
您可能已经注意到,构建更改了
compile:package
任务以指向jar文件

就这样

执行
sbt publishLocal
,jar文件应该在Ivy2本地存储库中,即
~/.Ivy2/local/org.abc/my-own-publish-jar\u 2.11/1.0.0/jars/my-own-publish-jar\u 2.11.jar


protip现在编写一个插件来使用命令行上指定的坐标来完成这项工作应该很容易了。

假设您有
wetElephant.jar
wetElephant javadoc.jar
文件,其中包含一些第三方库和相应的javadoc,您希望发布到本地repo并从中引用它们另一个使用
libraryDependencies
sbt taskKey的项目

这是你需要做的

  • 将您的库(
    wetrephant.jar
    wetrephant javadoc.jar
    )放入
    modules\wetrephant
  • 在build.sbt文件(或build.scala文件)中定义项目

  • 从sbt/activator调用
    publishLocal
    任务(我从activator调用,并在前面加上项目名称):

  • 。。。并阅读输出以查看发布内容和发布位置:

        /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"
    

  • 免责声明:我不知道如何不发布源代码…

    谢谢,但我已经知道如何将sbt项目发布到我的本地存储库。我要问的是如何将一个现有的jar文件添加到本地存储库中。你知道怎么做吗?对,但这不是一个项目,而是一个jar文件。我该怎么做?在sbt的最新版本中,这是
    publishLocal
    而不是
    publishLocal
    :-1,maven与这个问题无关,尽管不是你的错,OP在这个问题上添加了“maven”标记。哈哈,虽然不是你的错,所以-1。他在存储库中有一个他需要的jar文件,maven是一个存储库。@cbmanica Roy在这里是正确的。我正在向上投票以取消你被误导的向下投票。这是一个非常有趣的问题,因为我几乎没有看到不期望项目的任务(除了<代码>关于)。你可以想到一个插件,你可以在全球范围内注册,并使用它将JAR发布到本地常春藤存储库。我知道没有插件可以做到这一点。这对我来说很有效。为了实现我的特定目标,我不得不放弃
    {scalaBinaryVersion.value}
    ,但除此之外,这就是解决方案。是的,对于不需要Scala版本的Java JAR,您可以设置
    交叉路径:=false
    来删除它-但这只应该在Scala二进制兼容性没有问题的情况下用于本地构建。这种方法对我很有效,但任何人都可以建议如何将其扩展到多个JAR?谢谢这不管用。scala版本始终为2.10,版本始终为0.1.0。
        /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"