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

Jef*_*rod 58 sbt

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

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

Ren*_*aud 54

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

编辑:对不起,我误解了你的问题.这是一个将jar或源发布到本地常春藤仓库的示例.

  • 是的,但这不是一个项目,它是一个jar文件.我该怎么做呢? (3认同)

Jac*_*ski 32

tl; dr我称之为技巧而非sbt的特征.你被警告过了.

假设您必须file.jar发布.与任何构建工具一样,sbt包括,执行最终在项目中的文件中创建工件(大多数情况下是jar文件)的任务.

该项目设置工件的坐标.

诀窍是利用sbt所需的内容来设置要发布的jar 的环境(= 坐标)(否则你必须在命令行上指定它们,这可能是用户友好的,也可能不是用户友好的).

创建build.sbt必要的设置- ,,organization 和可能的-并保存其中的jar文件.nameversionscalaVersion

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")
Run Code Online (Sandbox Code Playgroud)

您可能已经注意到,构建更改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使用命令行中指定的坐标编写插件应该很容易.


paw*_*icz 5

比方说,你有wetElephant.jarwetElephant-javadoc.jar文件的一些第三方库,并要发布到本地回购和使用来自另一个项目referrence它对应的javadoc libraryDependenciesSBT 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"
      )
    
    Run Code Online (Sandbox Code Playgroud)
  3. publishLocal从sbt/activator 调用任务(我是从activator做的,并以proejct名称作为前缀):

    ./activator wetElephant/publishLocal                   
    
    Run Code Online (Sandbox Code Playgroud)

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

    /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
Run Code Online (Sandbox Code Playgroud)
  1. 可选择在另一个项目中使用这些库

    libraryDependencies += "com.stolenLibs" % "wetElephant" % "0.1-IDontKnow"
    
    Run Code Online (Sandbox Code Playgroud)

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


Roy*_*ove 0

尝试这个:

http://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

  • 哈哈,虽然不是你的错所以-1。他在存储库中有一个他需要的jar文件,maven是一个存储库。 (3认同)