2016-10-02 3 views
0

Ich habe eine Spring-Boot-App, die gut in der Produktionsumgebung funktioniert, aber in letzter Zeit habe ich ein paar Fragezeichen über Fett-Einführungsstrategie.Gesamtgröße des Fettglases ist etwa 80 MB und da alles gebündelt als Einmaliges Glas, jedes Mal, wenn ich eine einzelne Zeile ändere, wird dieses 80-MB-Paket erneut bereitgestellt. Wie kann ich dieses Fettglas in ein Hauptglas und andere Gläser (die nicht von mir entwickelt wurden) im Verzeichnis/lib aufteilen? Welche Möglichkeiten habe ich?Einsetzen von Spring Boot Fett

+0

Welches Bauwerkzeug verwenden Sie, Maven, Gradle? – Magnus

+0

Ich benutze Maven. – cacert

+0

Und das ist ein Problem, weil? Beim Entfernen der Verpackung werden grundsätzlich auch alle Abhängigkeiten entfernt. Jetzt, wenn Sie etwas upgraden, müssen Sie auch sicherstellen, dass es in diesen '/ lib'-Ordner kopiert wird. Irgendwann wird etwas aufgrund von alten/fehlenden Abhängigkeiten in diesem '/ lib'-Ordner kaputt gehen, jemand entfernt etwas, kopiert etwas, das praktisch aussieht usw. Im Allgemeinen wird das mehr Ärger geben, als es löst. Richten Sie stattdessen eine ordnungsgemäße Verwaltung für Ihr Repository ein (speichern Sie nur die letzten x-Versionen zum Beispiel). –

Antwort

1

Sie haben ein paar Optionen, einfachste Weg (and suggested by official docs) ist nur die Fettglas-Datei extrahieren.

$ unzip -q myapp.jar 
$ java org.springframework.boot.loader.JarLauncher 

Es gibt ein paar Probleme mit diesem, vor allem Anwendungscode wird nun eine Reihe von Klassendateien (nicht in einem eigenen Gefäß).
Das zweite Problem ist, dass Sie immer noch den Spring-Boot-Loader verwenden, der nicht mehr so ​​viel Dienstprogramm zur Verfügung stellt und auch das Dateisystem verschmutzt.

Die andere Möglichkeit besteht darin, Ihren Build zu ändern, um Ihnen das zu liefern, was Sie wollen.
Mit Gradle können Sie die application plugin verwenden, mit Maven würde ich die appassembler plugin empfehlen.

Appassembler erzeugt das Verzeichnis target/appassembler/, das ein bin-Verzeichnis mit einem Start-Skript und ein Repo-Verzeichnis mit all Ihren Abhängigkeiten enthält.

Um es zu verwenden, müssen Sie die Spring-Boot: Repackage-Task deaktivieren und dem Appassembler-Plugin mitteilen, was Ihre Hauptklasse ist.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <skip>true</skip> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>appassembler-maven-plugin</artifactId> 
      <version>1.10</version> 
      <configuration> 
       <programs> 
        <program> 
         <mainClass>com.example.MyMainClass</mainClass> 
         <id>myappname</id> 
        </program> 
       </programs> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
+0

Ich werde die zweite Option überprüfen, danke. – cacert