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?
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.
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 ).
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/
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"))