Maven: Wie können Abhängigkeiten entfernt werden, wenn sie bereits transitiv sind?

7

Zum Beispiel, wenn es Abhängigkeiten gibt:

%Vor%

Ich möchte die Abhängigkeit a -> c entfernen, weil a -> b -> c vorhanden ist.

Ich weiß, dass es einige starke Abhängigkeiten geben kann, die nicht reduziert werden sollten, aber es ist für diese Frage nicht relevant.

Beispiel:

%Vor%

Erwartetes Ergebnis:

%Vor%     
Xiè Jìléi 30.09.2010, 09:49
quelle

3 Antworten

12

Ich gehe davon aus, dass Sie die falschen / unnötigen Abhängigkeiten finden wollen, die bereits erfüllt sind, weil Sie sie kostenlos von einer anderen Abhängigkeit erhalten.

Ich kann mir vorstellen, dass Sie das vielleicht machen wollen, um Ihre Poms zu säubern.

Es ist jedoch normalerweise nicht das, was Sie gerne tun würden, da es eine gute Übung ist, explizit anzugeben, was Ihre Abhängigkeiten sind.

Sie wissen nie, ob das Modul b c als Abhängigkeit entfernt und damit a

bricht     
ithkuil 01.10.2010, 22:43
quelle
14

Verwenden Sie mvn dependency:analyze , um zu zeigen, ob in Ihrem Pom Abhängigkeiten existieren, die Sie nicht benötigen (es kann auch einige übersehene identifizieren, fügen Sie -DoutputXML=true hinzu, um die fehlenden Einträge anzuzeigen).

Verwenden Sie mvn dependency:tree , um die Abhängigkeiten anzuzeigen, die derzeit von Ihrem Projekt verwendet werden und wo Maven sie findet. Fügen Sie -Dverbose=true hinzu, um alle Duplikate und Konflikte anzuzeigen.

Wenn a direkt von c abhängt (dh wenn Code in a Klassen in c erwähnt), sollte der Pom dies widerspiegeln. Wenn a nur direkt von b abhängt, können Sie die Abhängigkeit c sicher von der Datei pom.xml von a entfernen. Die obigen Befehle sollten es Ihnen ermöglichen zu bestimmen, was die nächste geeignete Aktion ist.

Bearbeiten: Okay, Sie haben Ihre Frage aktualisiert. Hier ist, wie Sie es tun:

  1. im Projekt a , führen Sie mvn dependency:tree -Dverbose=true aus. Dies zeigt Ihnen eine vollständige Baumstruktur aller Abhängigkeiten, die Maven für Ihr Projekt in Betracht zieht.
  2. Sehen Sie sich die Ausgabe von Schritt 1 an und erstellen Sie eine Liste aller Abhängigkeiten, die auf mehr als einer Ebene angezeigt werden (einige davon werden wahrscheinlich Duplikate sein).
  3. Bearbeiten Sie Ihre pom.xml-Datei in einem beliebigen Editor und entfernen Sie alle Abhängigkeiten, die der in Schritt 2 erstellten Liste entsprechen.

Oder suchen Sie nach einer Möglichkeit, dies automatisch zu tun? Ich glaube nicht, dass es einen automatisierten Weg gibt, es sei denn, du schreibst selbst einen, denn was du versuchst zu tun, ist eine BAD IDEA . Sie sagen den Leuten, dass ihre Einwände für Ihre Frage "irrelevant" sind, aber Tatsache ist, dass Ihre Frage ist wie "Wie kann ich Maven verwenden, um es schwieriger zu machen, Maven zu benutzen?"

Es gibt keinen guten Grund, warum Sie das tun möchten. Wenn Sie denken, dass es einen guten Grund gibt, dann müssen Sie versuchen, dies zu tun, um ein Ergebnis zu erzielen. Sie sollten um Hilfe mit dem gewünschten Ergebnis bitten, weil Ihr Plan schlecht ist.

    
Zac Thompson 01.10.2010 08:45
quelle
2

Wie bei anderen Postern weiß ich nicht genau, was Sie erreichen möchten. Sind Ausschlüsse das, was Sie brauchen? Sie können Ausschlüsse verwenden, um Abhängigkeiten Ihrer Abhängigkeiten zu entfernen - wenn sie aus bestimmten Gründen nicht erwünscht sind.

%Vor%     
lexicore 01.10.2010 08:06
quelle