Как sbt может извлечь артефакты зависимости из git? - PullRequest
98 голосов
/ 26 сентября 2011

Я слышал (и я знаю, что также видел примеры, если только я могу вспомнить, где), что sbt может получить зависимости от git-репо.

Я ищу, чтобы получить зависимость харра / до из GitHub.Хранилище не предоставляет никаких файлов JAR артефактов, только дерево исходных текстов, которое настроено для сборки с использованием sbt.Процесс, который я себе представляю, состоит в том, что sbt загрузит репозиторий-источник, создаст его, а затем использует его в качестве артефакта зависимости.

Я могу представить, что sbt действительно может сделать что-то подобное,Может это?И если да, то как?

Ответы [ 4 ]

94 голосов
/ 12 января 2012

Вы можете импортировать неупакованные зависимости в ваш проект из GitHub, рассматривая их как зависимости проекта, используя оператор dependsOn.(Это отличается от способа включения предварительно скомпилированных библиотечных зависимостей).

Обратите внимание, что вы можете указать, какую ветвь тянуть, используя нотацию #.Вот некоторый код Scala SBT, который мне подходит:

object V {
  val depProject = "master"
  // Other library versions
}

object Projects {
  lazy val depProject = RootProject(uri("git://github.com/me/dep-project.git#%s".format(V.depProject)))
}

// Library dependencies
lazy val myProject = Project("my-project", file("."))
.settings(myProjectSettings: _*)
.dependsOn(Projects.depProject)
.settings(
  libraryDependencies ++= Seq(...

Обратите внимание, что если у вас несколько проектов SBT, зависящих от одного и того же внешнего проекта, стоит установить центральный sbt.boot.directory, чтобы избежать ненужных перекомпиляций (см. инструкции здесь ).

76 голосов
/ 26 сентября 2011

Да, действительно. Вы можете задать для своей Project зависимость с помощью оператора dependsOn и ссылаться на проект Github по его URI, например RootProject(uri("git://github.com/dragos/dupcheck.git")). Кроме того, вы можете git clone проект, а затем сослаться на вашу локальную копию с RootProject(file(...)). См. «Полная конфигурация» в вики SBT для деталей и примеров.

7 голосов
/ 17 сентября 2015

Поскольку у меня возникли проблемы с разрешением зависимостей моей библиотеки (с использованием предложенного RootProject), я хотел бы указать на объект с именем ProjectRef. Таким образом, если нужно зависеть от библиотеки, находящейся в git, я предлагаю сделать это следующим образом:

import sbt.Keys._
import sbt._

object MyBuild extends Build {

  lazy val root = Project("root", file("."))
    .dependsOn(myLibraryinGit)
    .settings(
      ...,
      libraryDependencies ++= Seq(...))

  lazy val myLibraryinGit = ProjectRef(uri("git://git@github.com:user/repo.git#branch"), "repo-name")

}

Источник: http://blog.xebia.com/git-subproject-compile-time-dependencies-in-sbt/

6 голосов
/ 15 декабря 2017

Я хотел бы добавить ответ для SBT 0,13+. Просто поместите что-то подобное в вашу build.sbt корневую папку проекта (не Build.scala):

lazy val root = (project in file(".")).dependsOn(playJongo)

lazy val playJongo = RootProject(uri("https://github.com/bekce/play-jongo.git"))
...