1. 程式人生 > 其它 >jar包解壓和壓縮

jar包解壓和壓縮

JAR 檔案就是 Java Archive ( Java 檔案檔案),它是 Java 的一種文件格式。 JAR 檔案非常類似 ZIP 檔案
準確的說,它就是 ZIP 檔案,所以叫它檔案包。JAR 檔案與 ZIP 檔案唯一的區別就是在 JAR 檔案的內容中,多出了一個META-INF/MANIFEST.MF 檔案,這個檔案是在生成 JAR 檔案的時候自動建立的 (也可以自行建立)

1. jar包還原

Soring boot 專案jar包解壓之後 修改檔案之後 在不依靠開發工具的情況下重新壓縮jar包 打包命令如下:

jar -cvf0M xxx.jar BOOT-INF/ META-INF/ org/

具體操作

[admin@custmer-development-d apps_other]$ ll
total 20736
-rw-rw-r--. 1 admin admin 21224413 Nov 18 10:36 alert-0.0.1-SNAPSHOT.jar
drwxr-xr-x. 4 admin admin       67 Nov 18 10:35 BOOT-INF
drwxr-xr-x. 3 admin admin       36 Nov 18 10:35 META-INF
drwxr-xr-x. 3 admin admin       28 Feb  1  1980 org
[admin@custmer-development-d apps_other]$ jar -cvf0M alert.jar BOOT-INF/ META-INF/ org/


[admin@custmer-development-d apps_other]$ ll
total 60256
-rw-rw-r--. 1 admin admin 21224413 Nov 18 10:36 alert-0.0.1-SNAPSHOT.jar
-rw-r--r--. 1 admin admin 19095463 Nov 20 18:27 alert.jar
drwxr-xr-x. 4 admin admin       67 Nov 18 10:35 BOOT-INF
drwxr-xr-x. 3 admin admin       36 Nov 18 10:35 META-INF
drwxr-xr-x. 3 admin admin       28 Feb  1  1980 org
[admin@custmer-development-d apps_other]$ java -jar alert.jar
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.4.0)

2020-11-20 18:30:27 [main] INFO  cn.AlertApplication -Starting AlertApplication v0.0.1-SNAPSHOT using Java 1.8.0_60 on custmer-development-d-031162.te.td with PID 10833 (/home/admin/apps_other/alert01.jar started by admin in /home/admin/apps_other)
2020-11-20 18:30:27 [main] INFO  cn.AlertApplication -The following profiles are active: dev
2020-11-20 18:30:29 [main] INFO  org.springframework.boot.web.embedded.tomcat.TomcatWebServer -Tomcat initialized with port(s): 8082 (http)
2020-11-20 18:30:29 [main] INFO  org.apache.coyote.http11.Http11NioProtocol -Initializing ProtocolHandler ["http-nio-8082"]
2020-11-20 18:30:29 [main] INFO  org.apache.catalina.core.StandardService -Starting service [Tomcat]

2. jar常用命令

壓縮

jar -cvf xxx.jar

解壓

jar -xvf xxx.jar

更新

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

列出jar包內容

jar -tvf xxx.jar

執行jar

java -jar xxx.jar
java -jar xxx.jar &
nohup java -jar &

  • &表示在當視窗關閉時,程式才會中止執行。&代表讓該命令在後臺
  • 命令 “nohup java -jar XXX.jar &” 表示不掛斷執行命令,當賬戶退出或終端關閉時,程式仍然執行。注意,該作業的所有輸出被重定向到nohup.out的檔案中。

nohup java -jar XXX.jar >temp.log &

表示不掛斷執行命令,當賬戶退出或終端關閉時,程式仍然執行,並且該作業的所有輸出被重定向到temp.log的檔案中。“ > temp.log ” 該命令就是指定日誌輸出的檔案。
">>"表示將輸出以追加的方式重定向到Log.log中。
nohup java -jar XXX.jar >>temp.txt &
nohup java -jar XXX.jar > /dev/null 2>&1 &

  • 標準輸入檔案(stdin):stdin的檔案描述符為0,Unix程式預設從stdin讀取資料。
  • 標準輸出檔案(stdout):stdout 的檔案描述符為1,Unix程式預設向stdout輸出資料。
    標準錯誤檔案(stderr):stderr的檔案描述符為2,Unix程式會向stderr流中寫入錯誤資訊。
  • 遮蔽輸出,起到禁止輸出作用:/dev/null 是一個特殊的檔案,寫入到它的內容都會被丟棄;如果嘗試從該檔案讀取內容,那麼什麼也讀不到。但是 /dev/null 檔案非常有用,將命令的輸出重定向到它,會起到"禁止輸出"的效果
    “> Log.log 2>&1” :表示將 stdout 和 stderr 合併後重定向到 Log.log
  • 可通過jobs命令檢視後臺執行任務

3.jar命令引數

用法:jar {ctxui} [vfmn0PMe] [jar檔案] [清單檔案] [入口點] [-C目錄]檔案...
選項:
    -c建立新檔案
    -t列出要歸檔的目錄
    -x從存檔中提取命名(或所有)檔案
    -u更新現有檔案
    -v在標準輸出上生成詳細輸出
    -f指定歸檔檔名
    -m包含來自指定清單檔案的清單資訊
    -n在建立新存檔後執行Pack200規範化
    -e指定獨立應用程式的應用程式入口點
        捆綁到可執行的jar檔案中
    -0只儲存;不使用ZIP壓縮
    -P從檔名保留前導的“ /”(絕對路徑)和“ ..”(父目錄)元件
    -M不為條目建立清單檔案
    -i為指定的jar檔案生成索引資訊
    -C更改為指定目錄幷包含以下檔案
如果任何檔案是目錄,則將對其進行遞迴處理。
清單檔名稱,歸檔檔名稱和入口點名稱為
以與“ m”,“ f”和“ e”標誌相同的順序指定。

示例1:將兩個類檔案歸檔到名為classes.jar的歸檔檔案中:
       jar cvf classes.jar Foo.class Bar.class
示例2:使用現有清單檔案“ mymanifest”並將所有
           foo /目錄中的檔案放入“ classes.jar”:
       jar cvfm classes.jar mymanifest -C foo /

5. java -jar 啟動引數詳情

java -Xms800m -Xmx800m -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxNewSize=512m -jar xxx.jar > xxx.file 2>&1 &
1、-Xms :表示java虛擬機器堆區記憶體初始記憶體分配的大小,通常為作業系統可用記憶體的1/64大小即可,但仍需按照實際情況進行分配。有可能真的按照這樣的一個規則分配時,設計出的軟體還沒有能夠執行得起來就掛了。
2、-Xmx: 表示java虛擬機器堆區記憶體可被分配的最大上限,通常為作業系統可用記憶體的1/4大小。但是開發過程中,通常會將 -Xms 與 -Xmx兩個引數的配置相同的值,其目的是為了能夠在java垃圾回收機制清理完堆區後不需要重新分隔計算堆區的大小而浪費資源。
3、-XX:newSize:表示新生代初始記憶體的大小,應該小於 -Xms的值;
4、-XX:MaxnewSize:表示新生代可被分配的記憶體的最大上限;當然這個值應該小於 -Xmx的值;
5、-Xmn:至於這個引數則是對 -XX:newSize、-XX:MaxnewSize兩個引數的同時配置,也就是說如果通過-Xmn來配置新生代的記憶體大小,那麼-XX:newSize = -XX:MaxnewSize = -Xmn,雖然會很方便,但需要注意的是這個引數是在JDK1.4版本以後才使用的。
6、-XX:PermSize:表示非堆區初始記憶體分配大小,其縮寫為permanent size(持久化記憶體)
7、-XX:MaxPermSize:表示對非堆區分配的記憶體的最大上限。

localhost:~ hjma$ java -X
    -Xmixed           混合模式執行(預設)
    -Xint             僅解釋模式執行
    -Xbootclasspath:<用 : 分隔的目錄和 zip/jar 檔案>
                      設定引導類和資源的搜尋路徑
    -Xbootclasspath/a:<用 : 分隔的目錄和 zip/jar 檔案>
                      附加在引導類路徑末尾
    -Xbootclasspath/p:<用 : 分隔的目錄和 zip/jar 檔案>
                      置於引導類路徑之前
    -Xdiag            顯示附加診斷訊息
    -Xnoclassgc        禁用類垃圾收集
    -Xincgc           啟用增量垃圾收集
    -Xloggc:<file>    將 GC 狀態記錄在檔案中(帶時間戳)
    -Xbatch           禁用後臺編譯
    -Xms<size>        設定初始 Java 堆大小
    -Xmx<size>        設定最大 Java 堆大小
    -Xss<size>        設定 Java 執行緒堆疊大小
    -Xprof            輸出 cpu 分析資料
    -Xfuture          啟用最嚴格的檢查,預計會成為將來的預設值
    -Xrs              減少 Java/VM 對作業系統訊號的使用(請參閱文件)
    -Xcheck:jni       對 JNI 函式執行其他檢查
    -Xshare:off       不嘗試使用共享類資料
    -Xshare:auto      在可能的情況下使用共享類資料(預設)
    -Xshare:on        要求使用共享類資料,否則將失敗。
    -XshowSettings    顯示所有設定並繼續
    -XshowSettings:system
                      (僅限 Linux)顯示系統或容器
                      配置並繼續
    -XshowSettings:all
                      顯示所有設定並繼續
    -XshowSettings:vm 顯示所有與 vm 相關的設定並繼續
    -XshowSettings:properties
                      顯示所有屬性設定並繼續
    -XshowSettings:locale
                      顯示所有與區域設定相關的設定並繼續

-X 選項是非標準選項。如有更改,恕不另行通知。

轉載出處:https://blog.csdn.net/qq_39900031/article/details/109860769