web-dev-qa-db-fra.com

Comment sbt peut-il extraire des artefacts de dépendance de git?

J'ai entendu (et je sais que j'ai vu des exemples aussi, si seulement je me souviens où) que sbt peut obtenir des dépendances à partir d'un dépôt git.

Je cherche à obtenir la dépendance harrah/up de github. Le référentiel ne fournit aucun fichier JAR d'artefact, uniquement une arborescence source configurée pour être construite à l'aide de sbt. Le processus que j'imagine est que sbt va télécharger le référentiel source, le construire, puis l'utiliser comme artefact de dépendance.

J'imagine peut-être que sbt peut en fait faire quelque chose comme ça. Peut-il? Et si oui, comment?

99
Owen

Oui en effet. Vous pouvez donner à votre Project une dépendance avec l'opérateur dependsOn, et vous pouvez référencer un projet Github par son URI, par exemple RootProject(uri("git://github.com/dragos/dupcheck.git")). Vous pouvez également git clone Le projet, puis référencer votre copie locale avec RootProject(file(...)). Voir "Configuration complète" sur le wiki SBT pour plus de détails et des exemples.

78
Kipton Barros

Vous pouvez importer des dépendances non empaquetées dans votre projet à partir de GitHub en les traitant comme des dépendances de projet, en utilisant l'opérateur dependsOn. (Ceci est distinct de la façon dont les dépendances de bibliothèque précompilées sont incluses).

Notez que vous pouvez spécifier la branche à extraire à l'aide de # notation. Voici quelques Scala code SBT qui fonctionne bien pour moi:

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

Notez que si vous avez plusieurs projets SBT dépendant du même projet externe, cela vaut la peine de mettre en place un _ sbt.boot.directory pour éviter les recompilations inutiles (voir instructions ici ).

96
Alex Dean

Comme j'ai eu des problèmes pour résoudre les dépendances de ma bibliothèque (en utilisant le RootProject suggéré), je voudrais signaler l'objet appelé ProjectRef. Ainsi, si l'on doit dépendre d'une bibliothèque résidant dans git, je suggère de le faire comme suit:

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")

}

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

8
Marc Juchli

Je voulais ajouter une réponse pour sbt 0.13+. Mettez quelque chose comme ça dans votre build.sbt sur le dossier racine du projet (pas Build.scala):

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

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