2013-08-05 10 views
20

Ich habe ein sbt-Plugin namens sbt-jumi geschrieben, das sbt-Integration für Jumi implementiert. Momentan hängt das sbt-jumi Plugin von der aktuellen Jumi Version ab.Wie überschreibt man die Abhängigkeit eines sbt-Plugins?

Hier ist die entsprechende Zeile aus der build.sbt Plugin:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.5.376" 

Und ein Benutzer des Plugins würden es seine project/plugins.sbt Datei hinzufügen:

addSbtPlugin("fi.jumi.sbt" % "sbt-jumi" % "0.1.0") 

Nun lasst uns sagen, dass Jumi 0.6 .400 ist freigegeben und abwärtskompatibel. Wie kann ein Benutzer des sbt-jumi Plugins es für die Verwendung von Jumi 0.6.400 konfigurieren, ohne dass ich eine neue Version des Plugins veröffentlichen muss?

Here is how to do it in Maven. Aber wie geht das in sbt?

Antwort

29

Das Überschreiben der Abhängigkeiten von Plugins erfolgt auf die gleiche Weise wie das Überschreiben normaler Abhängigkeiten, außer dass die Konfiguration in eingegeben werden muss. Das Überschreiben von Abhängigkeiten wird in Library Management erklärt. Hier ist eine Zusammenfassung:

Wenn die Version, die Sie verwenden möchten, größer ist als die Abhängigkeit, die Sie transitiv erhalten würden, wird sbt die größere Version standardmäßig verwenden. Sie können den Konflikt-Manager ändern das Standardverhalten ändern - zum Beispiel wird dies einen Fehler auf Konflikt erstellen:

conflictManager := ConflictManager.strict 

Mit anderen Worten, dies in project/plugins.sbt funktionieren würde:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.6.400" 

Sie können überprüfen Sie Ihre Plugin Abhängigkeiten mit reload plugins und dann show update. Es sollte jetzt die ältere Version als "(EVICTED)" zeigen.

Wenn die Version, die Sie verwenden möchten, niedriger als die Standardabhängigkeit ist, müssen Sie anders überschreiben. Eine Möglichkeit ist es, die Abhängigkeit zu zwingen:

libraryDependencies += "fi.jumi" % "jumi-launcher" % "0.4.350" force() 

Eine andere Möglichkeit ist es, die dependencyOverrides Einstellung zu verwenden:

dependencyOverrides += "fi.jumi" % "jumi-launcher" % "0.4.350" 

Der Unterschied zwischen den beiden Methoden ist, dass übergeordnete keine direkte Abhängigkeit einzuführen. Ich denke nicht, dass der Unterschied für Plugins wichtig ist, aber für veröffentlichte Artefakte hat es some differences.

+0

Hier ist ein Problem, das ich bekommen und teilen möchte: Tag 0: aktuelle online veröffentlichte Version des Plugins '0.3' | Tag1: Ich veröffentliche lokal mein In-Development-Plugin mit Version '0.4' und referenziere dieses Plugin mit einem lokalen Repository | Tag 2: Das Plugin wird mit der Version '0.4' im offiziellen Internet Repo | veröffentlicht tag 3: mein plugin tut nicht mehr das was ich erwarte weil sbt beide plugs lädt aber ich entscheide mich für den aus dem internet. Zur Umgehung des Problems musste ich meine Version auf '0.5' umstellen und dann funktionierte es. – Maxence

Verwandte Themen