¿Cómo puede sbt extraer artefactos de dependencia de git?


He escuchado (y sé que también he visto ejemplos, si solo puedo recordar dónde) que sbt puede obtener dependencias de un repositorio git.

Estoy buscando obtener la dependencia harrah/up de github. El repositorio no proporciona ningún archivo artifact JAR, solo un árbol de fuentes que está configurado para ser construido usando sbt. El proceso que estoy imaginando es que sbt descargará el repositorio de código fuente, lo construirá y luego lo usará como artefacto de dependencia.

Puedo estar imaginando que sbt de hecho puede hacer algo como esto. ¿Puede? Y si es así, ¿cómo?

Author: Owen, 2011-09-26

4 answers

Sí, de hecho. Puedes darle a tu Project una dependencia con el operador dependsOn, y puedes hacer referencia a un proyecto de Github por su URI, por ejemplo RootProject(uri("git://github.com/dragos/dupcheck.git")). Alternativamente, puede git clone el proyecto, y luego hacer referencia a su copia local con RootProject(file(...)). Ver "Configuración completa" en la wiki de SBT para más detalles y ejemplos.

 74
Author: Kipton Barros,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-26 03:40:45

Puedes importar dependencias no empaquetadas en tu proyecto desde GitHub tratándolas como dependencias de proyecto, usando el operador dependsOn. (Esto es distinto de la forma en que se incluyen las dependencias de bibliotecas precompiladas).

Tenga en cuenta que puede especificar qué rama extraer usando la notación #. Aquí hay un código Scala SBT que funciona bien para mí:

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(...

Tenga en cuenta que si tiene varios proyectos SBT que dependen del mismo proyecto externo, vale la pena configurar un central sbt.boot.directory para evitar recompilaciones innecesarias (ver instrucciones aquí).

 91
Author: Alex Dean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-31 15:30:24

Dado que tuve problemas para resolver las dependencias de mi biblioteca (usando el RootProject sugerido) me gustaría señalar el objeto llamado ProjectRef. Por lo tanto, si uno necesita depender de una biblioteca que reside en git, le sugiero que lo haga de la siguiente manera:

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://[email protected]:user/repo.git#branch"), "repo-name")

}

Fuente: http://blog.xebia.com/git-subproject-compile-time-dependencies-in-sbt/

 7
Author: Marc Juchli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 19:22:26

Quería añadir una respuesta para sbt 0.13+. Simplemente ponga algo como esto en su build.sbt en la carpeta raíz del proyecto (no Build.scala):

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

lazy val playJongo = RootProject(uri("https://github.com/bekce/play-jongo.git"))
 4
Author: bekce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-15 07:52:49