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