Frage Immer mit Maven `clean` Goal?


Sollte der Maven clean Ziel sollte bei jedem Build als Best Practice angewendet werden, um veraltete CLASS-Dateien zu vermeiden? Oder vielleicht immer benutzen clean ist unnötig, da Maven klug genug ist zu wissen, welcher Quellcode aufgrund von Änderungen neu kompiliert werden muss?

  • kompilieren
  • Installieren
  • etc?

Gareth Davis wies auf die potentielle Gefahr hin, einen Lauf zu vergessen clean nach Umbenennung einer CLASS-Datei - https://stackoverflow.com/a/4662536/409976.

Beispiel:

  1. Kompiliermodul (nicht ganzes Projekt) - Foo.java -> target / Foo.class
  2. In Bar.java umbenennen und Modul erneut kompilieren -> target / {Foo.class, Bar.class}
  3. neu kompilieren main
  4. BOOM - anderer Modulcode sollte nicht kompiliert werden können, da er darauf angewiesen war, eine Foo-Klasse zu erstellen (aber es existiert noch länger, da wir nicht bereinigt haben).

Ich untersuche, ob die Abwesenheit von clean verbessert die Build-Leistung auf einer Gast-VM in einem freigegebenen Verzeichnis. Mir sind jedoch nicht alle Folgen bekannt nicht immer anrufen clean Schritt zuerst.


5
2018-04-28 14:34


Ursprung


Antworten:


Laufen clean vor jedem Build ist immer eine gute Übung, da das veraltete Klassenszenario, das Sie erwähnt haben, vollständig möglich ist und wenn es angetroffen wird, kann es Probleme in Ihrem endgültigen Artefakt verursachen.

Ich untersuche, ob das Fehlen von Clean die Build-Leistung auf einer Gast-VM verbessert.

Bei der Leistung ist meine Vermutung, dass Sie Zeiteffizienz meinen. Indem Sie das saubere Ziel vermeiden, können Sie Zeit sparen, da Maven nur die Klassen erstellt, in denen Änderungen vorgenommen wurden, und den Rest der unberührten Klasse auslassen. Also, technisch gesprochen, ja, Sie sparen etwas Zeit im Build-Prozess.

Mir sind jedoch nicht alle Konsequenzen bewusst, die sich daraus ergeben, dass ich den sauberen Schritt nicht immer zuerst anrufe.

Klassenverjährung ist bei weitem das häufigste Problem, dem Sie begegnen können und werden.

Durch Erfahrung kann ich ein paar Dinge teilen. Wenn Sie eine IDE verwenden und Ihre Projektstruktur ein bisschen groß ist komplex (ein paar abhängige Module etc etc) dann läuft mvn clean verwechselt manchmal die IDE mit der Verwaltung des Build-Pfads des Projekts und Sie können darauf stoßen ClassNotFoundExceptions. Obwohl kein großes Problem, aber Sie müssen ein Projekt machen -> maven -> Projekt aktualisieren, um den Build-Pfad richtig einzustellen.

(Bearbeiten Sie jedoch, wenn Sie es über Befehl lien ausführen, wird dieses Problem nie auftreten)

Auf deinen Dev-Maschinen ist alles gut mit mvn install, aber wenn Sie einen Build auf dem Produktions- oder Testserver bereitstellen, ist es das Beste, mit zu gehen mvn clean bevor du a mvn install um sicherzustellen, dass keine Probleme auftreten und alle Klassen einmal gebaut werden, bevor sie in ein Glas / Krieg oder irgendetwas eingewickelt werden


7
2018-04-28 14:44