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

4 minutos de lectura

He oído (y sé que también he visto ejemplos, si recuerdo dónde) que sbt puede obtener dependencias de un repositorio de git.

Estoy buscando obtener la dependencia. harra/arriba de github. El repositorio no proporciona ningún archivo JAR de artefactos, solo un árbol de fuentes que está configurado para construirse usando sbt. El proceso que estoy imaginando es que sbt descargará el repositorio de origen, lo construirá y luego lo usará como el artefacto de dependencia.

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

¿Como puede sbt extraer artefactos de dependencia de git
alex decano

Puede importar dependencias no empaquetadas a su proyecto desde GitHub tratándolas como dependencias del proyecto, usando el dependsOn operador. (Esto es distinto de la forma en que se incluyen las dependencias de la biblioteca precompiladas).

Tenga en cuenta que puede especificar qué rama extraer usando # 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 una central sbt.boot.directory para evitar recompilaciones innecesarias (ver instrucciones aquí).

  • ¿Puede sbt también mantener el git local actualizado con “git pull”? O tengo que hacerlo manualmente?

    – Arné

    11 de julio de 2013 a las 22:34

  • ¿Es posible establecer "my-project" dinámicamente, usando el name := "MyProject" ajuste de build.sbt en la raíz del proyecto?

    – daniel

    25 de diciembre de 2013 a las 0:55

  • git:// La sintaxis del protocolo no parece funcionar para mí en play/sbt 13.0. https:// aunque funciona Esto también puede deberse a una configuración específica de git.

    – Sebastián Graff

    11/01/2014 a las 19:57

  • El uso de sbt 0.13.9 y sbt actualiza la dependencia de git correctamente mediante un clon superficial (git clone — depth 1).

    – Martín Tapp

    28/10/2015 a las 13:15

  • La rama solo funciona si se establece en masterde lo contrario obtengo: [error] No project 'project_name' in 'ssh://git@github.com/user/project.git#branch'

    – Neil

    11 mayo 2016 a las 22:19


Sí, de hecho. puedes dar tu Project una dependencia con el dependsOn operador, y puede 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 haga referencia a su copia local con RootProject(file(...)). Ver “Configuración completa” en el wiki de SBT para obtener detalles y ejemplos.

  • ¿Sabes si es posible incluir esto en build.sbt?

    – Owen

    2 de octubre de 2011 a las 1:52

  • Gran idea. Pero si ese proyecto cambia, ¿cómo obligas sbt para volver a compilarlo? clean no parece ayudar.

    – axel22

    22 de septiembre de 2012 a las 14:37

  • Hola Axel22, encontraste alguna solución a tu problema?

    –Jimmy Luong

    22 de abril de 2014 a las 16:15

  • ¿Cómo puede configurar esto en situaciones en las que el repositorio git es privado? ¿Hay alguna manera de configurar SBT para enviar una clave de implementación, que podría configurarse en un archivo de puntos o una variable de entorno?

    – acjay

    6 de enero de 2016 a las 22:58


  • También me gustaría saber cómo hacer cambios de extracción de sbt después de enviar una nueva confirmación al repositorio de github, si lo apunto a #master, recargar, lo clona, ​​luego presiono una nueva confirmación en el maestro y sbt todavía funciona con el repositorio clonado originalmente sin notar una nueva confirmación. En este punto, uno tiene que eliminarlo de /.sbt/0.13/staging/ y hacer que sbt lo clone de nuevo o ir allí y hacer git pull

    – lisak

    2 de septiembre de 2017 a las 12:05


¿Como puede sbt extraer artefactos de dependencia de git
Marc Juchli

Como tuve problemas para resolver las dependencias de mi biblioteca (usando el método sugerido RootProject) Me gustaría señalar el objeto llamado ProjectRef. Por lo tanto, si uno necesita depender de una biblioteca que reside en git, sugiero hacerlo 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://git@github.com:user/repo.git#branch"), "repo-name")

}

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

  • En caso de error de clonación de git, intente con https uri versión.

    – Waldemar Wosinski

    26 de enero de 2017 a las 9:34

Quería agregar una respuesta para sbt 0.13+. Solo pon algo como esto a tu 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"))

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad