web-dev-qa-db-fra.com

Comment référencer un projet sbt externe à partir d'un autre projet sbt?

J'ai la configuration suivante d'une application Scala et d'une bibliothèque de base commune: root

 -> /ApplicationA
   -> /project
     -> /build.sbt
 -> /CoreLibrary
   -> /project
     -> /build.sbt

Je veux ajouter une référence d'ApplicationA à CoreLibrary à la référence du projet Eclipse, afin que chaque fois que CoreLibrary change, ApplicationA soit également construit. J'ai essayé le contenu suivant de build.Scala pour ApplicationA:

  val core = Project(
      id = "platform-core",
      base = file("../CoreLibrary"))

  val main = Project(id = "application, base = file(".")).dependsOn(core)

Cependant, lors de la compilation d'ApplicationA SBT se plaint qu'une dépendance ne peut être qu'un sous-répertoire !!:

Java.lang.AssertionError: assertion failed: Directory C:\git\CoreLibrary is not contained in build root C:\git\ApplicationA

Cela semble tout à fait simple, quelle est la bonne façon d'avoir cette dépendance de projet?

52
Diego

Vous pouvez faire une dépendance de source sur votre projet comme ça:

 lazy val core = RootProject(file("../CoreLibrary"))

 val main = Project(id = "application", base = file(".")).dependsOn(core) 

J'ai un exemple de travail avec une construction de jeu multimodule: https://github.com/ahoy-jon/play2MultiModule/blob/master/playapp/project/Build.scala

Mais je pense que la bonne façon (cela dépend de votre contexte) de le faire est de créer un

 -> /project/
   -> Build.scala
 -> /ApplicationA
   -> /project
     -> /build.sbt
 -> /CoreLibrary
   -> /project
     -> /build.sbt

référençant les deux projets et les dépendances entre eux.

45
jwinandy

Avec sbt 0.12.1, il semble possible d'obtenir une référence simple à un projet:

J'ai utilisé ProjectRef au lieu de RootProject

http://www.scala-sbt.org/0.12.1/api/sbt/ProjectRef.html

ProjectRef(file("../util-library"), "util-library")

sbt-Eclipse fonctionne également.

22
Maxence

Depuis sbt 0,1, vous pouvez créer des définitions multi-projets directement dans .sbt sans avoir besoin d'un Build.scala fichier.

Donc, ajouter ce qui suit à ApplicationA/project/build.sbt serait suffisant.

lazy val core = RootProject(file("../CoreLibrary"))

val main = Project(id = "application", base = file(".")).dependsOn(core) 
12
Mustafa