82 votes

Comment gérer plusieurs modules interdépendants avec SBT et IntelliJ IDEA?

Je suis le développement de plusieurs modules avec des dépendances entre eux, et voudrais travailler avec eux tous ensemble dans une IDÉE de projet. Je suis l'aide de sbt-idée pour générer IDÉE projets de la sbt les définitions de build, qui fonctionne très bien pour des projets individuels. Dans le module multiple cas, cependant, les choses que j'ai essayé jusqu'à présent n'a pas assez de travail:

Utilisation sbt-idée de générer une IDÉE .iml fichier pour chaque module de façon indépendante; puis créer une IDÉE de projet à partir de zéro un ajouter ces modules. Cela rend le module de sources modifiables dans la même fenêtre, mais les dépendances entre eux ne sont pas suivies (et donc essayer de naviguer à partir d'une source au sein de l' foo projet pour quelque chose dans la barre de m'emmène à l'importés version de la bibliothèque de bar, pas de sources locales).

Utilisation sbt multi-projet s'appuie (aka sous-projets), où le parent du projet de construction.scala contient des choses comme:

lazy val foo = Project(id = "foo", base = file("foo"))
lazy val bar = Project(id = "bar", base = file("bar")) dependsOn(foo)

Cela fonctionne presque, dans ce sbt-idée génère un maître IDÉE de projet avec les dépendances entre les sous-projets suivis. Il y a cependant deux bémols:

  1. Il semble être un tas de restriction que le sous-projets doivent vivre dans des sous-répertoires du projet maître (c'est à dire, file("../foo") n'est pas autorisé). Ce n'est pas vraiment ce que je veux (ce que si un module, comme une "utils" ou "communes" paquet-est utilisé dans deux projets principaux?) mais je peux vivre avec ça.
  2. Un de mes sous-projets a son propre sous-projets; je ne suis pas sûr de savoir si sbt s'occupe elle-même avec ce nid de projets correctement, mais en tout cas, ils sont ignorés par sbt-idée. Évidemment, j'ai besoin de sous-projets imbriqués pour être inclus de façon récursive dans le projet de master.

Pour résumer: je voudrais récupérer des modules qui peuvent déjà avoir des sous-projets dans une grande IDÉE de projet avec les dépendances pour la pratique de l'édition. Comment puis-je le faire? Merci!

7voto

Edmondo1984 Points 5059

L'approche multi-projet de construction est correcte. Vous pouvez avoir une arborescence imbriquée des sous-projets de longueur arbitraire, mais vous ne pouvez pas avoir un module appartenant à de multiples parent projets. Cela rend absolument sens, et Maven arrive la même chose.

La raison en est qu'il serait difficile d'avoir le même module dans de multiples projets et de garder les sources synchronisées. Un flux normal est le suivant:

  • Vous avez un projet pour lequel le module appartient, où vous modifiez la source du module.
  • Vous publiez le module dans votre dépôt local
  • Dans d'autres projets où vous avez besoin du module, vous déclarer comme une libraryDependency

Si vous souhaitez charger un module qui n'appartient pas au projet en cours à l'intérieur d'Idée, ce n'est cependant réalisable que vous pouvez ajouter ce que l'un module externe de l'espace de travail:

  • SBT-IDÉE génère l' .iml les fichiers de votre projet et de les importer dans l'espace de travail
  • Vous pouvez ajouter d'autres.iml d'autres projets à l'espace de travail
  • Si vous modifiez externe SBT modules que vous avez ajouté manuellement à l'espace de travail, vous devez republier pour obtenir les changements visibile sur la "main" du projet, qui voit ces modules externes sont un "libraryDependency"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X