Wie teile ich die sbt-Plugin-Konfiguration zwischen mehreren Projekten?

8

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?

    
cvogt 14.02.2015, 22:56
quelle

1 Antwort

11

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.

build.sbt

sbt-your-company kann sbt-scalariform als Bibliotheksabhängigkeit wie folgt in build.sbt :

enthalten %Vor%

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:

%Vor%

src / main / scala / foo / houserules / FormatPlugin.scala

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 :

%Vor%

Dieses Plugin führt die Einstellungen für scalariformSettings und benutzerdefiniertes Format von sbt-scalariform ein.

Verwendung

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

andere Nutzungen für das eigene Plugin

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.

    
Eugene Yokota 15.02.2015, 02:37
quelle

Tags und Links