Может ли SBT обновить зависимость git uri (всегда или по требованию)?

У меня есть следующий код sbt, чтобы добавить зависимость плагина от git uri:

import sbt._

object Plugins extends Build {
  lazy val username = ("git config --global user.bitbucket" !!).trim

  lazy val root = Project("root", file(".")) dependsOn(
    uri(s"https://[email protected]/team/build.git#build_0.1")
  )
}

Это отлично работает, но я обнаружил, что если я вношу изменения в build_0.1 и нажимаю его, когда я снова прихожу к compile проекту, sbt не вытаскивает изменения, которые я сделал, поэтому у меня есть плагин даты.

Как я могу заставить SBT всегда делать git тянуть зависимости, от которых он зависит?

Ответ 1

SBT до 0.13.2-M1 поддерживает только git clone и git checkout.

git clone используется, когда URL-адрес не содержит # для указания на ветку или фиксацию, например

git:file:///Users/jacek/sandbox/so/sbt-git/git-repo

git checkout выполняется, когда URL-адрес имеет # в URL-адресе, указывающем на ветку или фиксацию, например

git:file:///Users/jacek/sandbox/so/sbt-git/git-repo/#a221379c7f82e5cc089cbf9347d473ef58255bb2

Когда я commit изменил репо на git, мне пришлось обновить хеш фиксации в build.sbt тоже, чтобы иметь ссылку на изменение в проекте SBT (значение val v ниже).

lazy val v = "a221379c7f82e5cc089cbf9347d473ef58255bb2"

lazy val g = RootProject(uri(s"git:file:///Users/jacek/sandbox/so/sbt-git/git-repo/#$v"))

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

С изменениями в репозитории git проект SBT должен быть reload 'ed, поэтому можно выполнить новый checkout и обновить проект.

[root]> reload
[info] Loading global plugins from /Users/jacek/.sbt/0.13/plugins
[info] Loading project definition from /Users/jacek/sandbox/so/sbt-git/project
Cloning into '/Users/jacek/.sbt/0.13/staging/24535507588417c1c2dc/git-repo'...
Checking connectivity... done
[info] Set current project to root (in build file:/Users/jacek/sandbox/so/sbt-git/)
[root]>

Это болезненно, но делает трюк (и позволяет вам отслеживать, где вы находитесь с удаленным репо git).

Вы также можете найти Можно ли использовать несколько проектов из git в качестве зависимостей SBT?.