更新jar包里的配置文件

更新jar包里的配置文件

起因

從筆記本傳了個jar到服務器,運行的時候才發現配置文件一個ip項填錯了。本來很簡單的問題,maven重新打包就可以了,但是30多M的jar包就因為一個配置項錯了又要重新傳一遍,筆記本連的WiFi速度有限,又要個一兩分鐘。于是想直接在服務器上更新jar包里的配置文件。

方法一,更新jar包文件

最先想到的辦法是用命令把jar包解壓jar -xvf xxx.jar 修改完畢后重新打包 jar cf xxx.jar * ,本以為是大功告成,執行java -jar xxx.jar 報錯

no main manifest attribute,in xxx.jar

經了解需要在MANIFEST.MF文件添加main方法的類。用maven打包的話這些都自動配置了。 對比兩次生成MANIFEST.MF文件里邊確實少了不少內容項,根據報錯內容主要的main方法的類沒有指定

Main-Class: org.springframework.boot.loader.JarLauncher
Start-Class: xxxApp

用jar重新打包的方法肯定是不行了,肯定還有需要注意的細節。又一想我只是要修改配置文件,替換掉jar包里的配置文件就可以了。查了下jar的文檔。果然有更新方法:

jar uf xxx.jar BOOT-INF/classes/application-dev.yml

替換之,啟動jar,順順利利的啟動了 :) 。

方法二,jar重新打包

后來對于最先想到的方法又在網上查了下,也有對應的解決辦法,但是會有兩個問題要處理

  1. 阻止jar打包時重新生成清單列表, -M 不配置配置清單,這樣還可以使用maven生成的配置清單也就是MANIFEST.MF
jar -cfM xxx.jar *
  1. 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 *

參考

用法:jar {ctxu}[vfm0Mi] [jar-文件] [manifest-文件] [-C 目錄] 文件名 ... 
  選項: 
  -c 創建新的存檔
  -t 列出存檔內容的列表
  -x 展開存檔中的命名的(或所有的〕文件
  -u 更新已存在的存檔
  -v 生成詳細輸出到標準輸出上
  -f 指定存檔文件名
  -m 包含來自標明文件的標明信息
  -0 只存儲方式;未用zip壓縮格式
  -M 不產生所有項的清單(manifest〕文件
  -i 為指定的jar文件產生索引信息
  -C 改變到指定的目錄,并且包含下列文件
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,970評論 6 342
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,462評論 25 708
  • 1、jar簡介 Java歸檔文件格式(Java Archive, JAR)能夠將多個源碼、資源等文件打包到一個歸檔...
    SpaceCat閱讀 40,179評論 4 64
  • 該不該擱下重重的殼 尋找到底哪里有藍天 隨著輕輕的風輕輕的飄 歷經的傷都不感覺疼 我要一步一步往上爬 等待陽光靜靜...
    史麗芬閱讀 598評論 0 5