Ich entwickle mehrere Module mit Abhängigkeiten zwischen ihnen und möchte mit ihnen alle zusammen in einem IDEA-Projekt arbeiten. Ich verwende sbt-idea , um IDEA-Projekte aus den sbt-Build-Definitionen zu generieren, was für einzelne Projekte hervorragend funktioniert. Im Fall mit mehreren Modulen funktionieren die Dinge, die ich bisher ausprobiert habe, jedoch nicht ganz:
Verwenden Sie sbt-idea, um für jedes Modul unabhängig eine IDEA-IML-Datei zu generieren . Erstellen Sie dann ein Master-IDEA-Projekt von Grund auf neu und fügen Sie diese Module hinzu. Dadurch können die Modulquellen alle im selben Fenster bearbeitet werden, aber die Abhängigkeiten zwischen ihnen werden nicht nachverfolgt. Wenn ich also versuche, von einer Quelle innerhalb des foo- Projekts zu etwas in der Leiste zu navigieren, gehe ich zur importierten Bibliotheksversion der Leiste , nicht zu den lokalen Quellen ).
Verwenden Sie sbt - Multiprojekt -Builds (auch als Unterprojekte bezeichnet) , wobei die Build.scala des übergeordneten Projekts Folgendes enthält:
lazy val foo = Project(id = "foo", base = file("foo"))
lazy val bar = Project(id = "bar", base = file("bar")) dependsOn(foo)
Dies funktioniert fast, da sbt-idea ein Master-IDEA-Projekt mit den Abhängigkeiten zwischen den verfolgten Teilprojekten generiert. Es gibt jedoch zwei Einschränkungen:
- Es scheint eine sbt-Einschränkung zu sein, dass die Teilprojekte in Unterverzeichnissen des Masterprojekts gespeichert werden müssen (dh
file("../foo")
nicht zulässig sind). Dies ist nicht wirklich das, was ich will (was ist, wenn ein Modul - wie ein "utils" - oder "commons" -Paket - in zwei verschiedenen Masterprojekten verwendet wird?), Aber ich kann damit leben. - Eines meiner Teilprojekte hat seine eigenen Teilprojekte; Ich bin nicht sicher, ob sbt selbst mit diesen verschachtelten Projekten richtig umgeht, aber auf jeden Fall werden sie von sbt-idea ignoriert. Natürlich brauche ich verschachtelte Teilprojekte, um rekursiv in das Masterprojekt aufgenommen zu werden.
Zusammenfassend: Ich möchte Module, die möglicherweise bereits Teilprojekte enthalten, in einem großen IDEA-Projekt mit nachverfolgten Abhängigkeiten für eine bequeme Bearbeitung sammeln . Wie kann ich es tun? Vielen Dank!
quelle
Antworten:
Der Ansatz beim Erstellen mehrerer Projekte ist der richtige. Sie können einen verschachtelten Baum von Teilprojekten beliebiger Länge haben, aber Sie können kein Modul haben, das zu mehreren übergeordneten Projekten gehört. Das ist absolut sinnvoll und in Maven passiert dasselbe.
Der Grund ist, dass es schwierig ist, dasselbe Modul in mehreren Projekten zu haben und die Quellen synchron zu halten. Ein normaler Workflow ist folgender:
Wenn Sie ein Modul laden möchten, das nicht zum aktuellen Projekt in Idea gehört, ist dies jedoch möglich, da Sie es als externes Modul zum Arbeitsbereich hinzufügen können:
quelle
Mit sbt 13.5 und Intellij 13.x können Sie mithilfe einer Build.scala die Abhängigkeit zwischen Projekten mit dem relativen Pfad angeben . Angenommen, Sie haben zwei Projekte, ein Kernprojekt Commons und ein weiteres Projekt foo , die beide in einem gemeinsamen Verzeichniscode leben .
Fügen Sie dieses Code-Snippet in Build.scala ein
Generieren Sie Ihr IntelliJ-Projekt über sbt by
sbt gen-idea
quelle