簡體   English   中英

如何編輯遠程Linux服務器上現有jar內的application.properties或application.yml文件的內容

[英]How to edit the content of an application.properties or application.yml file inside an existing jar on a remote Linux server

如何編輯遠程Linux服務器上現有jar文件中的屬性文件(如application.properties )。

想象一下jar位於/home/user/my-spring-boot.jar ,我想更改application.propertires的用戶名

username=foo

username=bar

如何打開文件並更改屬性?

.jar文件只是一個擴展名不同的.zip文件, vim可以直接編輯zip文件及其內容! 只要vim.jar ,使用文件導航找到你的屬性文件並修改它。 vim將使用您的編輯維護zip。

有關詳細信息,請參見此處

可能的路線可能是將jar復制到zip文件,解壓縮,更改屬性,壓縮到zip並重命名為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

您可以使用emacs (在復制文件進行備份之后):

$ cp /home/user/bigExecutableJar.jar /home/user/bigExecutableJar.jar.bak 
$ emacs /home/user/bigExecutableJar.jar
  • 如果它很大,它會詢問你是否真的要打開文件。
  • 然后,您可以在緩沖區中搜索要修改的文件,列出jar中的所有文件; 如果需要,使用Cs進行搜索。
  • 選擇它打開文件,然后按RET
  • 進行更改,並使用Cx Cs保存。
  • 最后用Cx Cc關閉Emacs。

更改現有的JAR工件不是一個好主意。 相反,Spring Boot允許您以多種方式輕松地使用外部值覆蓋捆綁屬性。

例如,您可以在JAR旁邊放置一個application.properties文件,其中包含您要覆蓋的值。 您甚至不需要復制整個屬性文件,只需要復制要更改的屬性,因為它仍然會回退到捆綁的默認值。

詳細信息請記錄在這里:

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

使用emacs編輯jar文件中的內容

emacs jarfile

打開jar后,您可以瀏覽文件夾和文件。 搜索jdbc.properties並進行編輯。 然后使用cx cs保存更改。

注意:必須安裝zip並解壓縮

您可以使用jar xf bigExecutableJar.jar命令解壓縮jar檔案。 如果可以的話,我建議安裝atool因為它提供了一個更好的命令行來打包/解壓縮檔案。

除非您知道如何處理vi ,否則請使用nano作為編輯器。 某些系統還安裝了mc ,它是一個基於控制台的文件瀏覽器,具有內置編輯器。

更改文件后,您可以使用jar cf bigExecutableJar-new.jar -C .再次打包存檔jar cf bigExecutableJar-new.jar -C . (或atool --add

如果你真的想/需要使用jar ,我建議首先在新目錄中嘗試該命令,因為它有時不會像你期望的那樣運行。 切勿在原始文件上使用它!

我發現Java(或者更確切地說是Spring Boot)可能對JAR中的文件順序很挑剔(引入了循環庫依賴:“應用程序上下文中某些bean的依賴關系構成了一個循環”)。 因此,需要一種保存訂單的方法。

通過unzip 1.jar解壓縮原始JAR 1.jar並在生成的目錄樹中進行更改。 然后生成一個新的存檔2.jar同時使用原始1.jar作為參考保留文件的順序。

## -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    /$ )

這會將目錄放在文件之后 ,這很奇怪,但是我找到工作的唯一方法(關於循環依賴問題)。 這兩行可以組合成一個zip調用,但我把它們分開來整理。

為了使訂單保存起作用,新的存檔2.jar可能是新鮮的(尚未存在)。

Java要求嵌套的JAR文件無需進一步壓縮即可歸檔。 實現此目的的最簡單方法是對寫入新存檔的所有文件使用-Z store 這可能導致新存檔大於原始存檔。

您可以使用以下內容查看存檔的內部順序(插入您最喜歡的圖形差異實用程序)

diff <(unzip -t 1.jar) <(unzip -t 2.jar)

在Ubuntu 18.04上測試過。

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

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

第二個customAuthHeaderName值來自屬性文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM