Ich arbeite an einem Java-Projekt in Eclipse, mit Maven zum Erstellen und Verwalten von Abhängigkeiten. Das Projekt ist auf 5 Eclipse-Projekte verteilt, von denen eines der Eltern POM ist. Ich arbeite an einer Serverimplementierung, die auf einem viel komplizierteren Server basiert, den ein anderes Team implementiert hat. Also habe ich meine Arbeit von ihren bereits existierenden Code- und POM-Dateien abgeleitet und habe jetzt viele unnötige Abhängigkeiten in den POMs in diesen Eclipse-Projekten.
Relativ gesehen bin ich ein Maven Anfänger, aber ich kenne diesen Befehl:
%Vor%Wenn ich diesen Befehl mit dem Eclipse Maven-Plugin ausführe, erhalte ich eine lange Liste von "ungenutzten deklarierten Abhängigkeiten", aber wenn ich versuche, einige davon zu entfernen, bricht mein Programm ab, manchmal auf mysteriöse Weise.
Gibt es einen allgemein akzeptierten Best-Practice-Weg, um mit diesem Problem umzugehen? Oder bin ich damit einverstanden, diese (wahrscheinlich) unbenutzten Abhängigkeiten eins nach dem anderen zu entfernen und sicherzustellen, dass nichts nach dem Entfernen jedes einzelnen gebrochen wird?
Sie könnten versuchen, Ihren Code mit der aktivierten Option java -verbose:class
auszuführen. Dies erzeugt eine Ausgabe, die zeigt, wo (aus welcher JAR-Datei) jede Klasse geladen wird. (Anmerkung: Bei Sun JREs wird dies in Standardausgabe geschrieben; ich denke bei IBM JREs wird es in den Standardfehler geschrieben.) Hier ist ein Beispiel für die Ausgabe:
Solange Sie den Großteil Ihrer Programmlogik durchlaufen (damit die erforderlichen Klassen geladen werden), können Sie sicher davon ausgehen, dass alle jars, die in der Ausgabe von verbose: class nicht erwähnt werden, als maven-Abhängigkeit entfernt werden können.
Sie könnten auch eine Suche & amp; Ersetzen Sie die Ausgabe von verbose: class, indem Sie sie in csv umwandeln und dann in ein Tabellenkalkulationsprogramm zum Sortieren / Gruppieren nach JAR-Dateien einfügen.
Immer noch ein bisschen manuelle Anstrengung, aber zumindest würde es dir einen Startpunkt geben!
Ich weiß nicht, dass es allgemein anerkannte Best Practices dafür gibt, da alles, von Introspektion bis zu Services, zur Laufzeit unterbrochen werden kann. Komponententests könnten Ihnen helfen, aber wenn Sie keine gute Abdeckung haben, könnten sie Ihnen ein falsches Gefühl der Sicherheit geben. Sie müssen immer noch mit Funktionstests (hoffentlich automatisch) überprüfen, nachdem Sie jedes Paket entfernen.