web-dev-qa-db-de.com

So bearbeiten Sie den Inhalt einer Datei "application.properties" oder "application.yml" in einem vorhandenen jar auf einem Remote-Linux-Server

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?

27
d0x

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.

53
Brian Agnew

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
3
gtgaxiola

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
  • Wenn es groß ist, werden Sie gefragt, ob Sie die Datei wirklich öffnen möchten. 
  • Sie können dann im Puffer nach der Datei suchen, die Sie ändern möchten, und alle Dateien in der Dose auflisten. Verwenden Sie C-s, um gegebenenfalls eine Suche durchzuführen. 
  • Öffnen Sie die Datei, indem Sie sie auswählen, und drücken Sie RET.
  • Nehmen Sie Ihre Änderungen vor und speichern Sie mit C-x C-s
  • Zum Schluss schließen Sie Emacs mit 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

1
Natix

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

1
Jhonathan

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.

0
nobar

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!

0
Aaron Digulla