So bearbeiten Sie eine Eigenschaftsdatei (wie application.properties
) in einer vorhandenen JAR-Datei auf einem Remote-Linux-Server.
Stellen Sie sich vor, der Jar befindet sich in /home/user/my-spring-boot.jar
und ich möchte den Benutzernamen in application.propertires
von ändern
username=foo
zu
username=bar
Wie öffnet man die Datei und ändert die Eigenschaft?
Eine .jar
-Datei ist einfach eine .Zip
-Datei mit einer anderen Erweiterung, und vim
kann Zip-Dateien und deren Inhalt direkt bearbeiten! Einfach vim
Ihren .jar
, verwenden Sie den Datei-Navigator, um Ihre Eigenschaftendatei zu suchen und zu ändern. vim
behält die Zip bei Ihren Änderungen bei.
Siehe hier für weitere Details.
Ein möglicher Weg könnte darin bestehen, die Dose in eine ZIP-Datei zu kopieren, zu extrahieren, Ihre Eigenschaften zu ändern, in ZIP zu komprimieren und in JAR umzubenennen
cp myJar.jar myJar.Zip
unzip myJar.Zip
vim myProperties.properties (doing the change here)
Zip allMyFiles into myJar.Zip
cp myJar.Zip myModifiedJar.jar
Sie können dies mit emacs
tun (nachdem Sie Ihre Datei zur Sicherung kopiert haben):
$ cp /home/user/bigExecutableJar.jar /home/user/bigExecutableJar.jar.bak
$ emacs /home/user/bigExecutableJar.jar
C-s
, um gegebenenfalls eine Suche durchzuführen. RET
.C-x C-s
. C-x C-c
.Das Ändern eines vorhandenen JAR-Artefakts ist keine gute Idee. Stattdessen können Sie mit Spring Boot die gebündelten Eigenschaften auf verschiedene Weise mit externen Werten überschreiben.
Zum Beispiel können Sie eine application.properties
-Datei mit den Werten, die Sie überschreiben möchten, neben der JAR-Datei ablegen. Sie müssen dort nicht einmal die gesamte Eigenschaftendatei kopieren, sondern nur die Eigenschaften, die Sie ändern möchten, da sie immer noch auf die gebündelten Standardeinstellungen zurückgreift.
Die Details sind hier dokumentiert:
https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
Verwenden Sie Emacs zum Bearbeiten von Inhalten in der JAR-Datei
emacs jarfile
Nachdem Sie das Glas geöffnet haben, können Sie Ordner und Dateien durchsuchen. Suchen Sie die jdbc.properties und bearbeiten Sie sie. Speichern Sie dann die Änderungen mit c-x c-s.
Hinweis: Muss Zip installieren und entpacken
Ich habe festgestellt, dass Java (oder vielleicht war es Spring Boot) genauer über die Reihenfolge der Dateien in der JAR informiert ist Anwendungskontext bilden einen Zyklus "). Daher ist eine Methode zum Beibehalten der Reihenfolge erforderlich.
Entpacke das ursprüngliche JAR 1.jar
durch unzip 1.jar
und nehmen Sie Ihre Änderungen im generierten Verzeichnisbaum vor. Dann generiere ein neues Archiv 2.jar
unter Beibehaltung der Reihenfolge der Dateien unter Verwendung des Originals 1.jar
Als Referenz.
## -r = --recurse-paths
## -Z = --compression-method
Zip -r -Z store 2.jar $(unzip -l 1.jar |tr -s ' ' |cut -d' ' -f5 |grep -v /$ )
Zip -r -Z store 2.jar $(unzip -l 1.jar |tr -s ' ' |cut -d' ' -f5 |grep /$ )
Dies setzt die Verzeichnisse nach der Dateien, was seltsam ist, aber der einzige Weg, den ich gefunden habe, um zu arbeiten (in Bezug auf das zirkuläre Abhängigkeitsproblem). Diese beiden Zeilen können zu einem Aufruf von Zip
zusammengefasst werden, aber ich habe sie hier aus Gründen der Übersichtlichkeit getrennt.
Damit die Auftragserhaltung funktioniert, kann es wichtig sein, dass das neue Archiv 2.jar
neu erstellt werden (nicht bereits vorhanden).
Es gibt eine Java) Anforderung, dass verschachtelte JAR-Dateien ohne weitere Komprimierung archiviert werden müssen. Der einfachste Weg, dies zu erreichen, war die Verwendung von -Z store
für alle Dateien, die in das neue Archiv geschrieben wurden. Dies kann dazu führen, dass das neue Archiv größer als das Original ist.
Sie können die interne Reihenfolge des Archivs folgendermaßen überprüfen (fügen Sie Ihr bevorzugtes grafisches Diff-Dienstprogramm ein).
diff <(unzip -t 1.jar) <(unzip -t 2.jar)
Getestet unter Ubuntu 18.04.
Sie können jar
-Archive mit dem Befehl jar xf bigExecutableJar.jar
entpacken. Wenn Sie können, empfehle ich, atool
zu installieren, da es eine bessere Befehlszeile zum Packen/Entpacken von Archiven bietet.
Wenn Sie nicht wissen, wie vi
gehandhabt werden soll, verwenden Sie nano
als Editor. Auf einigen Systemen ist auch mc
installiert. Hierbei handelt es sich um einen konsolenbasierten Datei-Explorer mit einem integrierten Editor.
Nach dem Ändern der Datei können Sie das Archiv erneut mit jar cf bigExecutableJar-new.jar -C .
(oder atool --add
) packen.
Wenn Sie wirklich jar
verwenden wollen/müssen, schlage ich vor, den Befehl zuerst in einem neuen Verzeichnis auszuführen, da er sich manchmal nicht wie erwartet verhält. Niemals für die Originaldatei verwenden!