最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java項目打包與部署的完全指南(JAR vs WAR)

 更新時間:2026年05月25日 08:32:49   作者:身如柳絮隨風(fēng)揚  
本文詳細(xì)介紹了Java項目的打包與部署流程,涵蓋JAR包與WAR包的區(qū)別、Maven與Gradle打包命令、以及部署JAR與WAR包的具體步驟,無論是SpringBoot項目還是傳統(tǒng)Web應(yīng)用,都能從中獲得實用指導(dǎo),需要的朋友可以參考下

1. 引言

項目開發(fā)完成后,如何將其部署到服務(wù)器上,讓用戶能夠訪問?對于 Java 開發(fā)者而言,打包部署是上線前最后、也是最關(guān)鍵的一步。Java 項目通常打包成兩種格式:JARWAR。選擇哪種包,以及如何部署,取決于項目類型、運行環(huán)境和團隊習(xí)慣。

本文將從零開始,帶你全面了解:

  • ? JAR 包與 WAR 包的本質(zhì)區(qū)別和適用場景
  • ? 使用 Maven/Gradle 打包的具體命令
  • ? 部署 JAR 包的多種方式(前臺、后臺、參數(shù)配置)
  • ? 部署 WAR 包到 Tomcat 的詳細(xì)步驟
  • ? 部署流程全景圖與常見問題排查

無論你是剛?cè)腴T的開發(fā)者,還是需要負(fù)責(zé)上線任務(wù)的工程師,都能從中獲得實用的指導(dǎo)。

2. JAR vs WAR:核心區(qū)別

維度JAR 包WAR 包
全稱Java ARchiveWeb Application ARchive
包含內(nèi)容類文件、依賴庫、配置文件(可能含內(nèi)嵌容器)類文件、依賴庫、配置文件、Web 資源(JSP/HTML)
運行方式java -jar xxx.jar(獨立進程)放置在外部 Web 容器的 webapps 目錄下,啟動容器
適用場景Spring Boot / Spring Cloud 微服務(wù)、命令行工具傳統(tǒng)單體 Web 應(yīng)用、需要部署在統(tǒng)一管理的 Tomcat 集群
容器依賴無需安裝額外容器必須預(yù)先安裝 Tomcat/Jetty/JBoss 等
啟動速度快(直接啟動)相對慢(需啟動容器)
資源占用每個 JAR 獨立占用內(nèi)存多個 WAR 可共享同一個容器進程

3. 打包前的準(zhǔn)備:項目類型判斷

在打包之前,先明確你的項目是什么類型:

  • 如果是 Spring Boot 項目(默認(rèn)打包為 JAR,但也可配置為 WAR)
  • 如果是 傳統(tǒng) Servlet/JSP 項目(通常打包為 WAR)
  • 如果是 純工具類/批處理應(yīng)用(一定是 JAR)

可以通過 pom.xml(Maven)或 build.gradle(Gradle)中的打包配置判斷。

Maven 示例

<!-- 打包為 JAR -->
<packaging>jar</packaging>
<!-- 打包為 WAR -->
<packaging>war</packaging>

Gradle 示例

// 打包為 JAR
apply plugin: 'java'
// 打包為 WAR
apply plugin: 'war'

4. 打包命令詳解

4.1 Maven 項目

命令作用
mvn clean刪除 target 目錄,清理舊文件
mvn compile編譯源代碼
mvn test運行測試用例
mvn package打包(生成 JAR/WAR 到 target 目錄)
mvn install打包并安裝到本地 Maven 倉庫
mvn deploy打包并部署到遠(yuǎn)程倉庫(如 Nexus)

常用組合

# 跳過測試,快速打包
mvn clean package -DskipTests
# 生成可執(zhí)行 JAR(需 Spring Boot Maven 插件)
mvn clean package spring-boot:repackage

4.2 Gradle 項目

命令作用
gradle clean刪除 build 目錄
gradle build編譯、測試、打包
gradle build -x test跳過測試打包

打包后的文件位置:

  • Maven:target/xxx.jartarget/xxx.war
  • Gradle:build/libs/xxx.jarbuild/libs/xxx.war

5. 部署 JAR 包

5.1 基本運行命令

java -jar app.jar

該命令會在前臺運行,按 Ctrl + C 會終止進程,關(guān)閉終端也會導(dǎo)致進程退出。

5.2 后臺運行(Linux/Unix)

nohup java -jar app.jar > app.log 2>&1 &
  • nohup:忽略掛斷信號,關(guān)閉終端后進程繼續(xù)運行
  • > app.log:標(biāo)準(zhǔn)輸出重定向到文件
  • 2>&1:將錯誤輸出也重定向到同一個文件
  • &:后臺運行

查看進程:ps -ef | grep app.jar
停止進程:kill -9 <PID>

5.3 指定參數(shù)

5.3.1 系統(tǒng)屬性(-D)

java -Dserver.port=8081 -Dspring.profiles.active=prod -jar app.jar

5.3.2 命令行參數(shù)(–)

Spring Boot 支持使用 -- 直接覆蓋配置:

java -jar app.jar --server.port=8081 --spring.datasource.url=jdbc:mysql://localhost:3306/mydb

5.3.3 外部配置文件

java -jar app.jar --spring.config.location=/path/to/application.yml

5.4 常見 JVM 調(diào)優(yōu)參數(shù)

java -Xms512m -Xmx2g -XX:+UseG1GC -jar app.jar
  • -Xms:初始堆內(nèi)存
  • -Xmx:最大堆內(nèi)存
  • -XX:+UseG1GC:使用 G1 垃圾回收器

5.5 使用 systemd 管理 JAR(生產(chǎn)推薦)

創(chuàng)建服務(wù)文件 /etc/systemd/system/myapp.service

[Unit]
Description=My Spring Boot Application
After=network.target
[Service]
User=appuser
ExecStart=/usr/bin/java -jar /opt/myapp/app.jar
SuccessExitStatus=143
Restart=always
[Install]
WantedBy=multi-user.target

啟用并啟動:

systemctl daemon-reload
systemctl enable myapp
systemctl start myapp
systemctl status myapp

6. 部署 WAR 包

6.1 部署到 Tomcat

步驟 1:安裝 Tomcat

# 下載并解壓
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.89/bin/apache-tomcat-9.0.89.tar.gz
tar -xzf apache-tomcat-9.0.89.tar.gz
cd apache-tomcat-9.0.89

步驟 2:放置 WAR 包

將生成的 .war 文件復(fù)制到 Tomcat 的 webapps 目錄下:

cp myapp.war /path/to/tomcat/webapps/

Tomcat 會自動解壓并部署(默認(rèn)會監(jiān)聽 8080 端口)。訪問地址:http://localhost:8080/myapp/

步驟 3:啟動 Tomcat

./bin/startup.sh   # Linux
# 或
./bin/startup.bat  # Windows

步驟 4:查看日志

tail -f logs/catalina.out

步驟 5:停止 Tomcat

./bin/shutdown.sh

6.2 部署優(yōu)化

  • 配置虛擬路徑:修改 conf/server.xml,添加 <Context> 元素。
  • 熱部署:將 WAR 放到 webapps 后,Tomcat 會自動重新部署(但生產(chǎn)環(huán)境不建議)。
  • 內(nèi)存配置:修改 bin/catalina.sh(或 setenv.sh):
export JAVA_OPTS="-Xms512m -Xmx2g"

6.3 其他容器

  • Jetty:將 WAR 放到 webapps 目錄,運行 java -jar start.jar
  • WebLogic / WebSphere:通過管理控制臺部署

7. 部署流程全景圖

8. 常用命令速查表

操作命令
Maven 打包(跳過測試)mvn clean package -DskipTests
Gradle 打包gradle clean build
運行 JAR(前臺)java -jar app.jar
運行 JAR(后臺)nohup java -jar app.jar > /dev/null 2>&1 &
指定端口運行 JARjava -jar app.jar --server.port=8081
查看 JAR 進程ps -ef | grep java
停止 JAR 進程kill -9 <PID>
啟動 Tomcat./bin/startup.sh
停止 Tomcat./bin/shutdown.sh
查看 Tomcat 日志tail -f logs/catalina.out
查看端口占用netstat -tlnp | grep 8080

9. 常見問題與解決方案

9.1 JAR 包運行提示 “no main manifest attribute”

原因:打包時沒有指定主類(Main-Class)。
解決(Spring Boot):確保 spring-boot-maven-plugin 已配置。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

9.2 WAR 包部署后訪問 404

  • 檢查 webapps 下是否生成了同名目錄。
  • 確認(rèn)訪問路徑:http://ip:port/項目名/。
  • 查看 logs/catalina.out 是否有部署錯誤。

9.3 端口沖突

# 查看端口占用
netstat -anp | grep 8080
# 修改運行端口
java -jar app.jar --server.port=8081

9.4 內(nèi)存溢出(OOM)

增加堆內(nèi)存限制:

java -Xms1g -Xmx2g -jar app.jar

9.5 后臺運行的 JAR 如何查看實時日志?

tail -f app.log   # 如果重定向到了文件
# 或使用 journalctl(systemd 管理時)
journalctl -u myapp -f

10. 總結(jié)與最佳實踐

場景推薦方式
微服務(wù)、云原生應(yīng)用JAR + systemd(或 Docker)
傳統(tǒng)單體 Web 應(yīng)用,與運維統(tǒng)一管理WAR + Tomcat
開發(fā)調(diào)試java -jar 前臺運行
生產(chǎn)環(huán)境systemd / supervisor 管理 JAR,或使用容器編排
需要動態(tài)調(diào)整參數(shù)使用 --spring.config.location 外部化配置

部署檢查清單

  • ? 打包前運行所有測試
  • ? 使用 -DskipTests 加速構(gòu)建(僅當(dāng)測試已覆蓋)
  • ? 配置 JVM 堆大小和垃圾回收器
  • ? 將配置文件外置,避免重新打包
  • ? 配置日志輪轉(zhuǎn)(如 logrotate)
  • ? 設(shè)置健康檢查端點,配合監(jiān)控系統(tǒng)

以上就是Java項目打包與部署的完全指南(JAR vs WAR)的詳細(xì)內(nèi)容,更多關(guān)于Java項目打包與部署的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • springboot的controller中如何獲取applicatim.yml的配置值

    springboot的controller中如何獲取applicatim.yml的配置值

    本文介紹了在SpringBoot的Controller中獲取application.yml配置值的四種方式,并舉例說明了每種方式的使用場景和優(yōu)缺點,結(jié)合實例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • SpringMVC+MyBatis聲明式事務(wù)管理

    SpringMVC+MyBatis聲明式事務(wù)管理

    在最近的一個項目中,采用springMVC、mybatis,MySQL、tomcat,事務(wù)管理對于企業(yè)應(yīng)用來說是至關(guān)重要的,即使出現(xiàn)異常情況,它也可以保證數(shù)據(jù)的一致性。Spring Framework對事務(wù)管理提供了一致的抽象,
    2015-08-08
  • springboot配置druid多數(shù)據(jù)源的示例代碼

    springboot配置druid多數(shù)據(jù)源的示例代碼

    這篇文章主要介紹了springboot配置druid多數(shù)據(jù)源的示例代碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • Spring AOP實現(xiàn)Redis緩存數(shù)據(jù)庫查詢源碼

    Spring AOP實現(xiàn)Redis緩存數(shù)據(jù)庫查詢源碼

    這篇文章主要介紹了Spring AOP實現(xiàn)Redis緩存數(shù)據(jù)庫查詢的相關(guān)內(nèi)容,源碼部分還是不錯的,需要的朋友可以參考下。
    2017-09-09
  • Java調(diào)用GPU算力的實現(xiàn)示例

    Java調(diào)用GPU算力的實現(xiàn)示例

    本文主要介紹了Java調(diào)用GPU算力的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • 一小時迅速入門Mybatis之Prepared Statement與符號的使用

    一小時迅速入門Mybatis之Prepared Statement與符號的使用

    這篇文章主要介紹了一小時迅速入門Mybatis之Prepared Statement與符號的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java 異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲總結(jié)分析

    Java 異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲總結(jié)分析

    異常是程序之中導(dǎo)致程序中斷的一種指令流,異常一旦出現(xiàn)并且沒有進行合理處理的話,那么程序就將中斷執(zhí)行,這篇文章綜合介紹了異步線程監(jiān)聽與結(jié)果回調(diào)及異常捕獲
    2021-11-11
  • MybatisPlus 自動填充的實現(xiàn)

    MybatisPlus 自動填充的實現(xiàn)

    這篇文章主要介紹了MybatisPlus 自動填充的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • springBoot配置國產(chǎn)達夢數(shù)據(jù)庫的示例詳解

    springBoot配置國產(chǎn)達夢數(shù)據(jù)庫的示例詳解

    本文向大家介紹springBoot?配置國產(chǎn)達夢數(shù)據(jù)庫的相關(guān)知識,文章結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • 教你怎么用SpringBoot整合Swagger作為API

    教你怎么用SpringBoot整合Swagger作為API

    這篇文章主要介紹了教你怎么用SpringBoot整合Swagger作為API,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05

最新評論

嘉鱼县| 沛县| 巴青县| 麦盖提县| 阳新县| 吉木萨尔县| 灵川县| 合作市| 乳源| 甘肃省| 白水县| 夏河县| 平乐县| 商都县| 泸水县| 阳春市| 翼城县| 远安县| 江川县| 酒泉市| 乌拉特前旗| 潍坊市| 左云县| 通江县| 乃东县| 科技| 新田县| 兴文县| 阳山县| 民勤县| 云霄县| 遂宁市| 荣昌县| 台北市| 通渭县| 武乡县| 昌图县| 齐齐哈尔市| 大安市| 民权县| 海伦市|