1. Projekthintergrund
Spring Cloud erstellt Spring -Boot -Projekte, verfeinert die Ebenen jedes Projekts und erreicht den Zweck der Reduzierung der Kopplung. Die Projekte basieren auf erholsamer Kommunikation.
Verwenden Sie beim Verpackung des Projekts das Spring-Boot-Maven-Plugin-Plugin, um es zu verpacken, und das Fettglas wird erzeugt. Wenn das JAR-Paket gepackt ist, werden Sie feststellen, dass das JAR-Paket, von dem das Projekt abhängt, im Lib-Ordner unter Boot-Inf gespeichert ist. Nachdem Sie mehrere Unterprojekte analysiert haben, werden Sie feststellen, dass das gleiche JAR-Paket für die überwiegende Mehrheit ausmacht. Jedes Mal, wenn es in einer Online -Umgebung bereitgestellt wird, werden die gemeinsamen Gläser jedes Systems wiederholt auf dem Server zurückgestellt. Daher werden Sie natürlich darüber nachdenken, ob es eine Möglichkeit gibt, das gemeinsame JAR -Paket oder das JAR -Paket zu extrahieren, das nicht oft geändert wird, eine separate Kopie sortiert und dann externe Belastungen verwendet, um den Zweck des Abnehmens durch Fettgläser zu erreichen.
2. Fettes Glas schleudern
Nach der obigen Analyse und Überprüfung der relevanten Informationen haben wir die folgenden Schritte ausgeklärt, um das Abfall von Jar-Package zu gestalten:
1. Jedes Projekt konfiguriert das Spring-Boot-Maven-Plugin-Plugin (offizielles Dokument), um das im Fat JAR zurückgehaltene JAR-Paket zu generieren
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <layout>ZIP</layout> <!-- <excludeGroupIds> org.springframework.boot, org.springframework.cloud, org.mybatis.spring.boot, tk.mybatis, MySQL, com.alibaba, javax.persistence, io.springfox, org.springframework <artifactId> xx </artifactId> </include> </include> </configuration> </plugin>
Wie beim obigen Code können Sie je nach Situation exkludegroupids oder andere Tags einschließen oder andere Tags einschließen.
2. Extrahieren Sie die JAR -Pakete, die Sie nicht im Fat Jar aus dem Projektabhängigkeitsglas speichern möchten.
Methode 1 (empfohlen): Fügen Sie der Projekt-POM-Datei (offizielles Dokument) Maven-Abhängigkeits-Plug-in hinzu.
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependent-plugin</artifactId> <version>3.1.1</version> <executions> <execution> <id>copy-dependents</id> <phase>package</phase> <goals> <goal>copy-dependents</goal> </goals> <configuration> <!-- <outputDirectory> e:/lib </outputDirectory>-> <exkluedGroupIds> <!-Im Fat GroupID-Attributwert (multiple, getrennt) von JAR-Paket in JAR-exkludeGroupids> <overwritesNapshots> true </overwitesNapshots> </configuration> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </executions> </execution
Überprüfen Sie das offizielle Dokument auf die spezifische Bedeutung des Tags.
Verwenden Sie beim Verpacken von Maven zum Verpacken eines Projekts den Befehl maven:
MVN Clean Install -Installation -dmaven.test.skip = true -doutputDirectory = e:/lib (-doutputDirectory = e:/lib ist der vom JAR -Paket exportierte Pfad, von dem das Projekt dynamisch abhängt.
Nachdem das Konfigurations-Plug-In diesen Befehl ausgeführt hat, wird der Rest des Projekts in das angegebene Verzeichnis importiert, und die überschüssigen JAR-Pakete im Fettglas wird extrahiert.
Methode 2: Fügen Sie dem Projekt kein Plug-In des Maven-Abhängigkeits hinzu und kopieren Sie mit MVN die Befehle, die vom JAR-Paket für das Projekt abhängen. Diese Methode erfordert die Abhängigkeit, die jedes Unterprojekt von einzeln kopiert, und es können nur wenige Unterprojekte verwendet werden.
MVN -Abhängigkeit: Kopieabhängigkeiten -doutputDirectory = e:/lib (falls es kein dynamisches Verzeichnis angegeben ist, wird das Abhängigkeitsverzeichnis standardmäßig im Zielpfad des Projekts generiert)
Fügen Sie die von jedem Projekt exportierten Abhängigkeits -Jar -Pakete in einen Ordner ein, entfernen Sie die Duplizierung und löschen Sie die Abhängigkeitsglasspakete, die im Fettglas reserviert sind, und vervollständigen Sie dann die Entfernung der überschüssigen Jar -Pakete im Fettglas.
3. Platzieren Sie das extrahierte JAR -Paket in einen bestimmten Pfad des Servers, konfigurieren Sie das Projektstartskript und laden Sie es extern.
Nohup java -doader.path = "xx/lib" -Jar xx.jar
-Doader.Path ist die externe Ladeadresse.
Nach dem Abnehmen können Sie nach dem Verpacken des Projekts im JAR -Paket sehen. In der LIB unter Boot-Inf gibt es nur die erforderlichen Glasspakete, die die Größe des Fettglas erheblich reduzieren.
Die Konfiguration von POM kann im MicroService -System zur Bildung einer einheitlichen Konfiguration verwendet werden, und die JAR -Paketabhängigkeiten in jedem Projekt werden je nach spezifischer Situation geändert.
3.. Probleme auftreten und Lösungen
Während des Abschlusses war es nicht glattes Segeln. Als ich dachte, die Arbeit sei erledigt und startete das Projekt, stellte ich fest, dass das Startup fehlgeschlagen war und das Glas in Konflikt geriet.
1. Lösen Sie JAR -Paketkonflikte, analysieren Sie die Abhängigkeiten von JAR -Paketen über den MVN -Befehl und finden Sie die widersprüchlichen JAR -Pakete und vereinen Sie die Version.
In Eclipse habe ich einen neuen Maven -Build erstellt. Zu Beginn habe ich die MVN -Abhängigkeit ausprobiert: Baum und die Abhängigkeit von JAR -Paket als Ganzes analysiert, fand jedoch nicht die Abhängigkeit des Problem -JAR -Pakets. Dann habe ich die MVN -Abhängigkeit ausprobiert: Baum -Dverbose, und analysierte alle indirekten impliziten Abhängigkeiten als Ganzes und fand immer noch nicht die Abhängigkeit des Problem -JAR -Pakets.
Zu diesem Zeitpunkt vermute ich, dass das Projekt kein JAR -Paket enthält. Nach wiederholten Verpackungen sehe ich, dass dieses Problem tatsächlich in der Projektabhängigkeit liegt, aber zu tief versteckt ist. Daher können nur Analysen für ein einzelnes JAR -Paket durchgeführt werden:
MVN -Abhängigkeit: Baum -Dverbose -dincludes = xx: xx: xx (xx: xx: xx entsprechend JAR Package GroupID: artifactID: Version)
Nach Verwendung von Dincludes wird die Abhängigkeitsbeziehung des entsprechenden JAR -Pakets gefunden, und das JAR -Paket ist im Projekt ausgeschlossen. Nach der Wiederverpackung beginnt das Projekt erfolgreich und das Problem wird gelöst.
2. Während des Verpackungsprozesses verwendeten einige Unterprojekte das Feder-Boot-Maven-Plugin-Plugin nicht, sondern Maven-Jar-Plugin, um es direkt in ein Runnable-Glas zu verpacken. Nach der Kombination der Konfiguration der Fat Jar Slimming wurde festgestellt, dass das Glas, das sich auf interoperable hätte verlassen können, jetzt fehlgeschlagen ist. Da fette Gläser abschneiden, bleiben nur die Gläser von Projekten, deren Code häufig geändert wird, und die Abhängigkeiten werden nicht in Runnable -Gläser übergeben. Sie müssen daher ausdrücklich vom JAR -Paket des erforderlichen Projekts in diesem Projekt abhängen, um die Vollständigkeit des Projekts zu gewährleisten.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.