Wir haben eine Vielzahl von kleineren sbt-Projekten, die wir getrennt halten möchten (kein Multi-Projekt-Build). Allerdings möchten wir die Konfiguration zwischen den Builds teilen. Dazu haben wir derzeit ein weiteres Projekt, das alle Projekte in ihren Projekt- / Projekt- / Build.scala-Dateien als libraryDependency verwenden. Wir konnten die Build-Konfiguration mit nur integrierten sbt-Funktionen auf diese Weise zentralisieren.
Was wir noch nicht herausgefunden haben, ist, wie man pluginspezifische Build-Konfigurationen zentralisiert. Zum Beispiel verwenden wir sbt-assembly für mehrere unserer Dienste. Wir passen die Assembly mergeStrategy an und möchten diese in allen Projekten verwenden. Wie können wir die Konfiguration erneut verwenden?
Auch wie können wir automatisch bestimmte sbt-plugins für alle unsere Builds bereitstellen, wie die Assembly oder die skalariden Plugins, ohne sie manuell zu jedem Build hinzuzufügen?
Dies ist eines der Nutzungsmuster, die wir für automatische Plugins in Betracht gezogen haben. Auto-Plugins können von sbt-assembly oder sbt-scalariform abhängen und führen die Einstellungen automatisch in alle Projekte ein.
sbt-your-company kann sbt-scalariform als Bibliotheksabhängigkeit wie folgt in build.sbt
:
Da addSbtPlugin(...)
normalerweise nur in project/plugins.sbt
auftaucht, mag das ein bisschen seltsam sein, aber wenn man sich die Implementierung von addSbtPlugin
anschaut ist im Grunde libraryDependencies
mit ein paar zusätzlichen Attributen:
Eines der von auto plugin hinzugefügten Funktionen ist die Fähigkeit, ein Plugin basierend auf anderen Plugins auszulösen. Indem Sie Ihr Plugin auf Basis von plugins.JvmPlugin
auslösen, können Sie effektiv ein Plugin erstellen, das standardmäßig aktiviert ist. Hier ist ein Beispiel-Plugin namens FormatPlugin
:
Dieses Plugin führt die Einstellungen für scalariformSettings
und benutzerdefiniertes Format von sbt-scalariform ein.
Alles, was Sie tun müssen, ist, sbt-your-company in Ihre Builds aufzunehmen.
Falls eines Ihrer Projekte den FormatPlugin
ablehnen möchte, können Sie disablePlugins(...)
verwenden. Siehe Plugins verwenden .
Für ein vollständiges Beispiel, siehe auch sbt-houserules , das ich gerade erstellt habe. (Zufällig wollte ich dies für sbt Modularisierung erstellen.)
Sie können auch automatische Plugins verwenden, um andere Dinge wie die Version von allgemeinen Bibliotheken wie die Akka-Version oder alle Logging-Bibliotheken usw. zu konfigurieren.