Comment le 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 peux me rappeler où) que sbt peut obtenir des dépendances à partir d'un git repo.

je cherche à obtenir la dépendance harrah/up de github. Le dépôt ne fournit pas de fichiers JAR d'artefacts, seulement une arborescence des sources qui est configurée pour être construite en utilisant sbt . Le processus que j'Imagine est que sbt va télécharger le rapport source, le construire, et puis utiliser que comme la dépendance de l'artefact.

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

96
demandé sur Owen 2011-09-26 07:24:54

4 réponses

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")) . Alternativement, vous pouvez git clone le projet, puis la référence de votre copie locale avec RootProject(file(...)) . Voir "configuration complète" sur le wiki SBT pour plus de détails et des exemples.

74
répondu Kipton Barros 2011-09-26 03:40:45

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 différent de la façon dont les dépendances pré-compilées de bibliothèque sont incluses).

notez que vous pouvez spécifier quelle branche tirer en utilisant la notation # . Voici un peu de code Scala 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 en fonction du même projet externe, il vaut la peine de mettre en place un sbt.boot.directory central pour éviter les recalculations inutiles (voir instructions ici ).

91
répondu Alex Dean 2013-07-31 15:30:24

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 dépend d'une bibliothèque résidant dans git, je vous suggère de 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://git@github.com:user/repo.git#branch"), "repo-name")

}

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

7
répondu Marc Juchli 2018-01-09 19:22:26

je voulais ajouter une réponse pour sbt 0.13+. Il suffit de mettre quelque chose comme ça sur votre build.sbt dans 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"))
4
répondu bekce 2017-12-15 07:52:49