Spring-Boot-Lade-Jars (Anwendungsabhängigkeiten und externe Dateisystem-Jars)

8

Ich versuche herauszufinden, wie man eine Spring-Boot-Anwendung am besten so einrichtet, dass sie ihre eigenen jar-Abhängigkeiten hat, aber zusätzliche jars werden dem classpath zur Laufzeit hinzugefügt, wenn er als java -jar-Befehl ausgeführt wird. Welcher Ansatz macht mehr Sinn?

  1. Verwenden Sie das ursprüngliche jar (ohne Abhängigkeiten) und platzieren Sie alle jars (application und runtime) in einem Ordner im Dateisystem und verwenden PropertiesLauncher, um den loader.path to jars-Ordner anzugeben.

  2. Verwenden Sie das fat jar (mit Anwendungs-Jars), platzieren Sie die zusätzlichen jars im Dateisystem und fügen Sie diese als zusätzliche jars hinzu, die zum classpath hinzugefügt werden müssen. Nicht sicher, wie das gemacht werden kann.

  3. Gibt es einen anderen besseren Weg, dies zu tun?

adeelmahmood 24.01.2014, 18:35
quelle

2 Antworten

5

Das PropertiesLauncher wurde entwickelt, um mit fetten Gläsern zu arbeiten, also sollten Sie in der Lage sein, das fette Glas zu behalten und so viele zusätzliche Abhängigkeiten hinzuzufügen, wie Sie an einem externen Ort mögen, z. mit loader.path=/opt/app/lib:lib . Ich denke, das ist deine Option 2? Wenn es nicht funktioniert, können wir in einem GitHub-Problem diskutieren.

    
Dave Syer 24.01.2014, 18:40
quelle
4

Ich habe dieses Problem mit dem folgenden Spring-Boot-Maven-Plugin behoben Konfiguration, ich musste mein Uber-jar ohne ausgeschlossene Artefakte erstellen, um mein externes "lib" -Verzeichnis zu erstellen, dann fügte ich meine ausgeschlossenen Artefakte wieder hinzu und verpackte mein Uber-jar mit meinen anwendungsspezifischen Abhängigkeiten.

%Vor%

Dann fügte ich meiner "application.properties" die folgende Eigenschaft hinzu, die in meinem Jar "resources /" dir mein "lib" Verzeichnis für Spring PropertiesLauncher , wo ich" Lib "dir zusammen mit meinem Glas in das gleiche Verzeichnis.

%Vor%

Schließlich habe ich mein jar mit dem folgenden Befehl ausgeführt

%Vor%

Sie können auch die "loader.path" -Eigenschaft zu Ihrer Befehlszeile hinzufügen, ohne sie in Ihre "application.properties" wie den folgenden Befehl zu setzen, aber dieser Weg funktionierte nicht mit mir, da ich mein jar als ausführbare Datei gepackt habe eine, die ich als Linux-Dienst ausführen.

%Vor%

Nun habe ich erfolgreich meine Glasgröße von 29 M auf nur 1 M Glas reduziert, das nur meine anwendungsspezifischen Bibliotheken enthält, und es funktioniert sofort.

    
Ashraf Sarhan 24.12.2015 23:12
quelle

Tags und Links