Comment peut-on tirer 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 d’un repo git.

Je cherche à obtenir la dépendance harrah / up de github. Le référentiel ne fournit aucun fichier JAR d’artefact, mais uniquement une arborescence source configurée pour être créée à l’aide de sbt . Le processus que j’imagine est que sbt télécharge le référentiel source, le construit, puis l’utilise 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 d’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 manière dont les dépendances de bibliothèque précompilées sont incluses).

Notez que vous pouvez spécifier la twig à utiliser en utilisant la notation # . Voici un 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 dépendant du même projet externe, il est utile de configurer un sbt.boot.directory central sbt.boot.directory pour éviter les recompilations inutiles (voir les instructions ici ).

Comme j’avais des problèmes pour résoudre les dépendances de ma bibliothèque (en utilisant le projet RootProject ), je voudrais signaler l’object 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://git@github.com:user/repo.git#branch"), "repo-name") } 

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

Je voulais append une réponse à sbt 0.13+. Il suffit de mettre quelque chose comme ceci à 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"))