Was ist der Zweck von dependency-reduced-pom.xml, das vom Shade-Plugin generiert wird?

77

Ich habe die Dokumente gelesen und nichts gefunden, was darüber spricht, wofür es verwendet wird.

Transzendenz
quelle
1
Ist es im Mojo-Dokument nicht relativ klar: maven.apache.org/plugins/maven-shade-plugin/… ?
Tome
7
Nein, da ist nichts über seinen Zweck drin.
Transzendenz
5
Wenn Sie ein Modul A mit X-Abhängigkeiten haben und einige davon in einer bestimmten JAR (A-shaded.jar) schattieren, benötigen Sie diese schattierten Abhängigkeiten nicht, wenn Sie stattdessen von A-shaded.jar abhängen möchten von A.jar. Das Plugin erstellt also eine pom.xml, die nur die nicht schattierten Y-Abhängigkeiten enthält.
Tome

Antworten:

46

Der Schatten: Schatten Mojo ist ziemlich gut dokumentiert, insbesondere über den createDependencyReducedPomParameter, der diese dependency-reduced-pom.xmlDatei erstellt:maven-shade-plugin/shade-mojo.html#createDependencyReducedPom

Kurz gesagt, dies ist sehr nützlich, wenn Sie diese schattierte JAR (anstelle der normalen JAR) als Abhängigkeit für ein anderes Modul verwenden möchten. Das dependency-reduced-pom.xmlwird nicht enthält die JAR - Dateien bereits in dem schattigen ein, vermeiden unnötiges Doppel.

Mir
quelle
43
Ich bin mir nicht sicher, ob ich damit einverstanden bin, dass alles über mvn gut dokumentiert ist. Die Technologie ist von Natur aus schwer zu verstehen. Es wäre hilfreich zu verstehen, wie die abhängigkeitsreduzierte pom.xml verwendet wird. Wo und wie soll es verwendet werden.
Scott Boring
1
Oben fragt @ScottBoring, wo die Einstellung hinzugefügt werden soll. Es befindet sich im Konfigurationsblock und es gibt ein Beispiel für diesen Block in der Plugin-Definition auf der Verwendungsseite des Maven Shade Plugins .
Jeremy D
6
Aber wie, wenn Sie auf das schattierte Glas angewiesen sind, bringen Sie es dazu, stattdessen das DRP zu verwenden?
OrangeDog
Verwendet das Plugin diesen DRP nicht als Projekt-POM, wenn er für die Erstellung konfiguriert ist (z. B. für Installations- und Bereitstellungsphasen)?
Tome
3
@JeremyD er fragt nicht, wo er die Einstellung verwenden soll, er fragt, wo er das generierte POM verwenden soll.
Shannon
23

Ich habe die Dokumente ungefähr hundert Mal gelesen und konnte immer noch nicht verstehen, wofür das ist, was wirklich der Anwendungsfall dafür ist.

Schließlich denke ich Folgendes: Nehmen wir an, Sie haben ein Projekt mit den Abhängigkeiten A, B, C, D, E. In pom.xmlkonfigurieren Sie das Shade-Plugin so, dass es beim Erstellen des Uber-Jars (nennen Sie es foo.jar) es erstellt schließt A, B, C in das schattierte Glas ein, aber aus irgendeinem Grund entscheiden Sie sich, D, E nicht in das schattierte Glas aufzunehmen, obwohl Ihr Projekt davon abhängt - ein typisches Beispiel sind Abhängigkeiten, die nur zum Testen benötigt werden (z. B. Abhängigkeiten) das hat ein scopevon testund ist nicht im schattierten Glas enthalten). Das dependency-reduced-pom.xmlwird D, E darin definieren. Die Idee ist , dass , wenn jemand will , verwenden , foo.jardie dependency-reduced-pom.xmleinen Hinweis auf eine Art , dass Vorsicht foo.jarist Abhängigkeiten D, E in es fehlt - Benutzung auf eigene Gefahr. Sie können dann entscheiden, D, E explizit in das zu verwendende Projekt einzufügenfoo.jar.

Das dependency-reduced-pom.xmlist also eher so missing-dependencies.xmlund listet die Abhängigkeiten auf, die im Uber-Jar fehlen, das vom Shade-Plugin ausgegeben wird.

Morpheus
quelle
6
Können Sie bestätigen, ob sich dieses Verständnis im Laufe der Zeit als richtig erwiesen hat?
Anir