jar命令簡介
java部署jar包可以使用 java -jar命令,比如:
java -jar demo.jar
執行上述命令後,JAR 包中的程序將在 Linux 系統中運行。
注:在運行 JAR 包之前,確保你的 JAR 文件是可執行的,並且包含了正確的類和依賴項。如果 JAR 包依賴於其他庫或配置文件,確保它們也在正確的位置可用。
java -jar 是 Java 命令的一種形式,用於運行 JAR(Java Archive)文件。-jar 參數告訴 Java 虛擬機直接從 JAR 文件中執行主類。
除了-jar參數外,java命令還有許多其他常用的參數,以下是一些常見的參數:
- -cp或-classpath:指定類路徑,用於指定要搜索類的目錄或 JAR 文件。
- -server:啓用服務器模式的 JVM,適用於長時間運行的服務器應用程序。
- -XX:+HeapDumpOnOutOfMemoryError:在發生內存溢出時生成堆轉儲文件。
- -XX:+PrintGCDetails:打印詳細的垃圾回收信息。
- -Xmx:指定Java堆的最大內存大小。例如,-Xmx512m表示將最大堆內存設置爲512MB。通過調整堆內存大小,可以優化應用程序的性能和內存使用情況。
- -Xms:指定Java堆的初始內存大小。例如,-Xms256m表示將初始堆內存設置爲256MB。這個參數可以幫助您在啓動應用程序時控制初始內存分配的大小。
- -Xss:指定線程棧的大小。例如,-Xss1m表示將線程棧大小設置爲1MB。線程棧用於存儲線程的局部變量和方法調用信息。通過調整線程棧的大小,可以控制應用程序的併發性能和內存使用情況。
- -XX:MetaspaceSize=256m參數,您可以指定元空間的初始大小爲256MB。這意味着在應用程序啓動時,虛擬機會預分配256MB的內存用於存儲類的元數據。
- -XX:MaxMetaspaceSize=:指定元空間的最大大小。元空間用於存儲類的元數據信息。例如,-XX:MaxMetaspaceSize=256m表示將元空間的最大大小設置爲256MB。適當設置元空間的大小可以避免類加載和元數據溢出的問題。
- -D=:設置系統屬性。例如,-Djava.library.path=/path/to/libs設置java.library.path系統屬性爲/path/to/libs。您可以使用這個參數來配置應用程序的一些屬性,例如文件路徑、日誌級別等。
- -verbose:class:打印類加載信息。使用這個參數可以瞭解應用程序在運行過程中加載的類的詳細信息,包括類的名稱、來源等。
- -verbose:gc:打印垃圾回收信息。通過使用這個參數,您可以瞭解應用程序的垃圾回收情況,包括垃圾回收器的使用情況、回收的對象數量等。
- -Dfile.encoding=:設置默認的文件編碼。例如,-Dfile.encoding=UTF-8表示使用UTF-8編碼來讀取和寫入文件。正確設置文件編碼可以確保應用程序能夠正確處理不同字符集的文本數據。
- &:符號&用於將命令放在後臺運行。這意味着命令會在後臺執行,不會阻塞終端,你可以繼續在終端中執行其他操作。
示例如下:
java -jar -Xms4096m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m /opt/myapp/myapp.jar
命令如上,我們同時使用了多個參數。-Xms4096m設置最大堆內存爲4096MB,-Xmx4096m設置初始堆內存爲4096MB,-XX:MetaspaceSize=256m 將元空間的初始大小設置爲256MB,-XX:MaxMetaspaceSize=256m 將元空間的最大大小設置爲256MB,最後,通過-jar選項指定要運行的JAR文件爲myapp.jar。
java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/path/to/dump/file.hprof -jar MyProgram.jar
命令如上,堆轉儲文件將會被生成在指定的路徑/path/to/dump/下。
啓用堆轉儲可以幫助你在遇到內存問題時進行故障排查和分析,確定可能的內存泄漏或其他與內存使用相關的問題。但在實際使用中,還需要結合其他的監控和分析工具來全面瞭解程序的內存使用情況。
java -jar demo.jar &
命令如上,通過使用&,可以在不中斷其他工作的情況下運行 JAR 文件。這種方式可以避免打斷後程序停止運行的問題,但是如果關閉當前窗口後程序會停止運行。
nohup 命令
nohup 是一個在 Linux 和 Unix 系統中常用的命令,它的主要作用是讓命令在後臺運行,並且阻止該命令被終端的掛斷信號(HUP)打斷。
nohup java -jar demo.jar &
命令如上,即使關掉命令窗口,後臺程序demo.jar也會一直執行。
注:nohup並不能保證命令在系統重啓或其他情況下仍然繼續運行。如果你需要確保命令在系統重啓後仍然運行,可能需要使用其他的方法,如守護進程或系統服務。
nohup java -jar demo.jar >1.txt &
命令如上,這個命令的作用是將 Java JAR 文件demo.jar的輸出重定向到文件1.txt中,即輸出內容不打印到當前窗口上,而是輸出到1.txt文件中,並將其放在後臺運行。
nohup java -jar demo.jar >/dev/null 2>&1 &
命令如上,具體內容解釋如下:
-
【>/dev/null】:將命令的標準輸出重定向到/dev/null。/dev/null是一個特殊的文件,它會“吸收”所有寫入的內容,相當於將輸出丟棄。
-
【>】代表重定向到哪裏,例如:echo "123" > /home/123.txt
-
/dev/null 代表空設備文件
-
2> 表示stderr標準錯誤
-
& 表示【等同於】的意思,2>&1,表示2的輸出重定向【等同於】1
-
1 表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同於 "1>/dev/null"
-
0 標準輸入(一般是鍵盤)
-
1 標準輸出(一般是顯示屏,是用戶終端控制檯)
-
2 標準錯誤(錯誤信息輸出)
nohup java -Xms515m -Xmx1024m -jar -Dfile.encoding=UTF-8 demo.jar --spring.profiles.active=prod >/dev/null 2>&1 &
命令如上,在上一個命令的基礎上,增加了spring.profiles.active的指定,encoding的指定和java內存最大堆和初始堆的指定。
編寫sh文件
爲了不用每次部署都打命令,我們可以把編輯好的命令寫在一個.sh的文件裏。
比如,我們把下面命令寫到.sh的文件裏。
nohup java -Xms515m -Xmx1024m -jar -Dfile.encoding=UTF-8 app-kiba-spring-kafka-1.0.0.jar >/dev/null 2>&1 &
如下圖:
然後我們連接到linux,然後CD到文件夾,命令如下:
cd /soft/app-kiba-spring-kafka
然後執行命令:
./startup.sh
如果被系統提示:
-bash: ./startup.sh: Permission denied
這是因爲沒有執行.sh的權限。
執行命令:
chmod u+x *.sh
- chmod:是改變文件權限的命令。
- u+x:這部分是權限設置。u 表示用戶(user),x 表示執行(execute)權限。所以,u+x 表示爲用戶添加執行權限。
- *.sh:這是一個通配符表達式,表示所有以.sh結尾的文件。
所以,chmod u+x *.sh 命令的作用是爲當前目錄下所有以.sh結尾的文件添加用戶執行權限。
然後再重新運行 ./start.sh
運行成功後,界面應該沒有任何提示,我們可以直接請求我們的網站地址,測試即可,比如我的地址如下:
http://10.1.0.145:8520/code/doc.html#/home
請求結果如下:
發佈jar注意事項
includeSystemScope
發佈jar時,記得增加includeSystemScope,如下:
<includeSystemScope>true</includeSystemScope>
includeSystemScope是一個 Maven 項目中的配置項,includeSystemScope爲true,則 Maven 會將系統範圍的依賴項包含在構建過程中;如果設置爲false,則不會包含系統範圍的依賴項。
skip
發佈jar時,根據實際情況判斷是否刪除,如下:
<!-- <skip>true</skip>-->
如下圖:
停止jar包
如果需要停止正在運行的jar包,我們可以先執行jps查看正在運行的進程:
jps
然後找到運行的jar包,然後執行kill
kill 3335206 //關閉
kill -9 3335206 //強制關閉
也可以使用ps -ef | grep,代碼如下:
ps -ef | grep app-kiba-spring-kafka-1.0.0.jar
一樣可以捕獲進程的id。然後同樣執行kill命令。
注:此文章爲原創,任何形式的轉載都請聯繫作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點擊下方的【推薦】,非常感謝!