Как опубликовать jar в локальный репозиторий? - PullRequest
57 голосов
/ 17 октября 2011

У меня есть библиотека, скомпилированная в jar (не проект sbt, нет исходного кода, просто файл jar), который недоступен в репозитории.

Есть ли способ опубликовать jar локально, чтобы я мог добавить зависимость, используя нотацию libraryDependencies += "org.xxx" % "xxx" % "1.0"? (Я уже знаю, как добавить файл в проект, скопировав его в папку lib.)

Ответы [ 6 ]

53 голосов
/ 24 августа 2012

Действие ** publishLocal ** используется для публикации вашего проекта в локальном репозитории Ivy.По умолчанию этот локальный репозиторий находится в $ {user.home} /. Ivy2 / local.Затем вы можете использовать этот проект из других проектов на той же машине источник

РЕДАКТИРОВАТЬ: Извините, я неправильно понял ваш вопрос.Вот пример , чтобы опубликовать jar или исходники в вашем локальном репозитории ivy.

31 голосов
/ 23 октября 2014

tl; dr Я бы назвал это трюком, а не особенностью sbt.Вас предупредили.

Допустим, у вас есть file.jar для публикации.Как и для любого инструмента сборки, включая sbt, он предназначен для выполнения задач, которые в конечном итоге создают артефакт - в большинстве случаев файл jar - из файлов в проекте.

Проект устанавливает координаты для артефакта.

Хитрость заключается в том, чтобы использовать то, что sbt требуется для настройки среды (= координаты ) дляjar для публикации (в противном случае вы должны будете указать их в командной строке, которая может быть или не быть очень удобной для пользователя).

Создайте 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 Написание плагинасделать это с помощью координат, указанных в командной строке, теперь довольно просто.

5 голосов
/ 20 декабря 2015

Допустим, у вас есть wetElephant.jar и wetElephant-javadoc.jar файлы какой-то сторонней библиотеки и соответствующие javadocs, которые вы хотите опубликовать в локальном репозитории и сослаться на них из другого проекта, используя libraryDependencies sbt taskKey .

Вот что вам нужно сделать.

  1. Поместите свои библиотеки (wetElephant.jar и wetElephant-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. Вызовите publishLocal задачу из sbt / activator (я сделал это из 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
  1. При желании использовать эти библиотеки в другом проекте

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

Отказ от ответственности: я не знаю, как не публиковать источники ...

2 голосов
/ 18 октября 2011

Вот сообщение в блоге, за которым я следовал, чтобы отправить артефакт sbt в репозиторий maven (локальный и удаленный) несколько месяцев назад.

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

0 голосов
/ 28 января 2014

Я создал пример проекта Play Framework / 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 находятся в моем локальном репозитории ivy, но я думаю, что вы можете отредактировать это, чтобы работать и с простыми старыми jar-файлами.

Для запуска: play local-repository-created

Это более простая версия https://github.com/sbt/sbt-remote-control, которая делает намного больше в Build.scala.

0 голосов
/ 18 октября 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...