2012-09-25 9 views
23

Jak edytować plik właściwości (np. application.properties) wewnątrz istniejącego pliku JAR na zdalnym serwerze Linux.Jak edytować zawartość pliku application.properties lub pliku application.yml wewnątrz istniejącego słoika na zdalnym serwerze Linux

Wyobraź słoik znajduje się w /home/user/my-spring-boot.jar i chciałbym zmienić nazwę użytkownika wewnątrz application.propertires z

username=foo 

do

username=bar 

Jak otworzyć plik i zmień właściwość?

Odpowiedz

48

Plik .jar jest po prostu plikiem .zip z innym rozszerzeniem, i vim można bezpośrednio edytować pliki zip i ich zawartość! Po prostu vim swój .jar, użyj nawigatora plików, aby znaleźć plik właściwości i go zmienić. vim utrzyma zamek z twoimi zmianami.

Aby uzyskać więcej informacji, patrz here.

+0

wydaje się bardzo wygodne, ale dostaję „UWAGA: nazwa pliku nie pasuje” błąd po wybieranie pliku w nawigatorze. –

+3

Wow, cieszę się, że natknąłem się na tę odpowiedź! vim jest najlepszą rzeczą od vi –

+0

Nie sądzę, że jest to właściwe podejście do "przesłonięcia" właściwości umieszczonych w słoiku. Lepszym sposobem jest przekazanie właściwości za pomocą opcji -Dusername = bar lub zmiennej env podczas uruchamiania aplikacji Spring Boot – ootero

2

Prawdopodobna trasa może być skopiowanie jar w pliku zip, ekstrakt, zmienić swoje właściwości, skompresować do zip i zmiana nazwy na jar

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 
0

Można rozpakować archiwa jar za pomocą polecenia jar xf bigExecutableJar.jar. Jeśli możesz, proponuję zainstalować atool, ponieważ oferuje on lepszą linię poleceń do pakowania/rozpakowywania archiwów.

Jeśli nie wiesz, jak obsługiwać vi, użyj nano jako edytora. Niektóre systemy mają również zainstalowany mc, który jest eksploratorem plików opartym na konsoli, który ma wbudowany edytor.

Po zmianie pliku można zapakować archiwum ponownie używając jar cf bigExecutableJar-new.jar -C . (lub atool --add)

Jeśli naprawdę chcesz/potrzeby korzystania jar, proponuję spróbować komendy w nowym katalogu, po pierwsze dlatego, że czasami robi zachowuj się tak, jak oczekujesz. Nigdy nie używaj go na oryginalnym pliku!

1

Używać emacs dla zawartości zmienił pliku jar

emacs jarfile 

Po otwarciu słoika, można przeglądać pliki i foldery. Wyszukaj plik jdbc.properties i zmodyfikuj go. Następnie zapisz zmiany za pomocą c-x c-s.

Uwaga: konieczne jest zainstalowanie zip i rozpakować

1

Można to zrobić z emacs (po skopiowaniu pliku kopii zapasowej):

$ cp /home/user/bigExecutableJar.jar /home/user/bigExecutableJar.jar.bak 
$ emacs /home/user/bigExecutableJar.jar 
  • Jeśli jest duży, to pytasz jeśli naprawdę chcesz otworzyć plik.
  • Możesz następnie wyszukać plik, który chcesz zmodyfikować, w buforze z listą wszystkich plików w słoiku; użyj C-s, aby wykonać wyszukiwanie, jeśli jest to konieczne.
  • Otwórz plik, zaznaczając go i naciśnij RET.
  • Dokonaj zmian i zapisz za pomocą C-x C-s.
  • Wreszcie zamknij Emacs z C-x C-c.
1

Zmiana istniejącego artefaktu JAR nie jest dobrym pomysłem. Zamiast tego Spring Boot pozwala łatwo nadpisać właściwości pakietu wartościami zewnętrznymi na kilka sposobów.

Na przykład można umieścić plik application.properties obok pliku JAR z wartościami, które mają zostać zastąpione. Nie musisz nawet kopiować całego pliku właściwości, tylko te właściwości, które chcesz zmienić, ponieważ nadal wracają do domyślnych pakietów.

Szczegóły są opisane tutaj:

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

-1
sed -i "s/\(customAuthHeaderName=\).*\$/\1${customAuthHeaderName}/" configuration.properties 

sed -i "s/\(logoutPage=\).*\$/\1${logoutPage}/" configuration.properties 

Druga wartość customAuthHeaderName pochodzi z właściwości pliku

+0

Powinieneś podać dodatkowe wyjaśnienie. –

+0

Nie zapewnia to odpowiedzi na pytanie. Gdy masz już wystarczającą [reputację] (https://stackoverflow.com/help/whats-reputation), będziesz mógł [komentować dowolny wpis] (https://stackoverflow.com/help/privileges/comment); zamiast tego [dostarczaj odpowiedzi, które nie wymagają wyjaśnień od pytającego] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-zamiast). - [Z recenzji] (/ opinia/niskiej jakości-posts/18600327) – Keshav

Powiązane problemy