更新jar包里的配置文件
起因
從筆記本傳了個jar到服務器僚祷,運行的時候才發(fā)現(xiàn)配置文件一個ip項填錯了笔链。本來很簡單的問題席楚,maven重新打包就可以了,但是30多M的jar包就因為一個配置項錯了又要重新傳一遍畏浆,筆記本連的WiFi速度有限胆胰,又要個一兩分鐘。于是想直接在服務器上更新jar包里的配置文件全度。
方法一煮剧,更新jar包文件
最先想到的辦法是用命令把jar包解壓jar -xvf xxx.jar
修改完畢后重新打包 jar cf xxx.jar *
,本以為是大功告成将鸵,執(zhí)行java -jar xxx.jar
報錯
no main manifest attribute,in xxx.jar
經(jīng)了解需要在MANIFEST.MF
文件添加main方法的類。用maven
打包的話這些都自動配置了佑颇。 對比兩次生成MANIFEST.MF
文件里邊確實少了不少內(nèi)容項顶掉,根據(jù)報錯內(nèi)容主要的main方法的類沒有指定
Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: xxxApp
用jar重新打包的方法肯定是不行了,肯定還有需要注意的細節(jié)挑胸。又一想我只是要修改配置文件痒筒,替換掉jar包里的配置文件就可以了。查了下jar的文檔茬贵。果然有更新方法:
jar uf xxx.jar BOOT-INF/classes/application-dev.yml
替換之簿透,啟動jar,順順利利的啟動了 :) 。
方法二解藻,jar重新打包
后來對于最先想到的方法又在網(wǎng)上查了下老充,也有對應的解決辦法,但是會有兩個問題要處理
- 阻止jar打包時重新生成清單列表,
-M
不配置配置清單螟左,這樣還可以使用maven
生成的配置清單也就是MANIFEST.MF
jar -cfM xxx.jar *
- jar打包時不進行壓縮
-0
jar -cfM0 xxx *
壓縮的話會有錯誤啡浊,如下:(已被壓縮觅够,嵌套的jar文件無需被壓縮)
Unable to open nested entry 'BOOT-INF/lib/cache-api-0.4.jar'.
It has been compressed and nested jar files must be stored without compression.
最終命令:jar -cfM0 xxx.jar *
參考
- java doc
- 利用jar命令打包和解壓
- jar用法
用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ...
選項:
-c 創(chuàng)建新的存檔
-t 列出存檔內(nèi)容的列表
-x 展開存檔中的命名的(或所有的〕文件
-u 更新已存在的存檔
-v 生成詳細輸出到標準輸出上
-f 指定存檔文件名
-m 包含來自標明文件的標明信息
-0 只存儲方式;未用zip壓縮格式
-M 不產(chǎn)生所有項的清單(manifest〕文件
-i 為指定的jar文件產(chǎn)生索引信息
-C 改變到指定的目錄巷嚣,并且包含下列文件