Spring Boot項目打包和運行的操作方法
一、打包為JAR包并運行
Spring Boot 應(yīng)用內(nèi)嵌了 Web 服務(wù)器,所以基于 Spring Boot 開發(fā)的 web應(yīng)用也可以獨立運行,無須部署到其他 Web服務(wù)器中。下面以打包demo_test1項目為例,將 Spring Boot 項目打包為可執(zhí)行的 JAR 包并運行,具體操作如下。
1.打包為可執(zhí)行的 JAR 包
(1)添加Maven打包插件
SpringBoot程序是基于 Maven 創(chuàng)建的,在對SpringBoot 項目進(jìn)行打包前,需要在項目pom.xml文件中加入 Maven 打包插件,Spring Boot 為項目打包提供了整合后的 Maven 打包插件 spring-boot-maven-plugin,可以直接使用,具體代碼如下。
<build>
<plugins>
<!--Maven打包插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>(2)使用IDEA進(jìn)行打包
在Maven中提供了package 打包指令,IDEA 中也提供了非常便捷的項目打包支持。在此選擇在IDEA中對項目進(jìn)行打包。在IDEA中單擊右側(cè)的“Maven”工具欄,會彈出 Maven 的操作界面,如圖所示。

Lifecycle(生命周期)下展示了 Maven 項目構(gòu)建生命周期中常用的命令,選中對應(yīng)的命令雙擊后可以快速執(zhí)行該Maven 命令。其中,clean 命令可以清除所有在構(gòu)建過程中生成的文件,test 命令可以使用合適的單元測試框架來測試編譯的源代碼,package 命令可以完成項目編譯、單元測試、打包功能。
為了確保打包后的項目為最新編譯的代碼,并且不包含測試階段的代碼,可以在打創(chuàng)前先執(zhí)行 clean 命令,在跳過測試階段的模塊后進(jìn)行打包。首先在 Maven 操作界面中雙擊“clean”執(zhí)行清除 target 操作,然后單擊界面上方的

圖標(biāo)設(shè)置打包時跳過測試階段的模塊,最后雙擊“package”執(zhí)行打包操作。執(zhí)行打包操作后,會在控制臺中輸出打包的結(jié)果,如果打包成功會在項目的target 文件夾下創(chuàng)建項目對應(yīng)的可執(zhí)行JAR包,如圖所示。

2.運行 JAR 包
一個可執(zhí)行的 JAR包可以由 Java虛擬機(Java Virtual Machine,JVM)直接執(zhí)行而無須事先提取文件或者設(shè)置類路徑。對此可以直接使用Java命令運行可執(zhí)行的JAR包,運行JAR 包的命令的語法格式如下。
java -jar JAR包名稱
JAR包名稱為包含 JAR后綴的完整名稱。
運行JAR包時可以選擇在IDEA中或者在cmd窗口中執(zhí)行,這里選擇在cmd窗口中執(zhí)行。在本地打開項目的target 文件夾,如圖所示。

在地址欄中輸人“cmd”后按下“Enter”鍵,在當(dāng)前文件夾路徑下打開 cmd窗口,并在彈出的 cmd 窗口中使用 Java 命令運行 chapter01-0.0.1-SNAPSHOT.jar,如圖所示。

可以看出,Spring Boot項目打成的JAR 包已經(jīng)成功運行,并顯示了默認(rèn)的端口號8080。需要注意的是,由于執(zhí)行Java命令需要計算機中安裝了Java的JDK環(huán)境,如果沒有安裝的話,執(zhí)行后會報錯。
JAR 包運行后,可以對項目進(jìn)行訪問,以測試打包后的效果,在瀏覽器中訪問 http://localhost:8080,如圖所示。

二、打包為WAR包并運行
雖然通過 Spring Boot內(nèi)嵌的Tomcat 可以將項目打成JAR包后直接運行,但每個JAR包中都會包含獨立的 web 容器,對服務(wù)器的使用消耗會比較大。當(dāng)想要在一個 Web容器中運行多個項目時,可以把每個項目打包成一個WAR包,然后部署到Web容器中運行下面以打包demo_test1項目為例,將Spring Boot項目打包為WAR 包并運行,具體操作如下。
1.打包為可執(zhí)行的 WAR 包
(1)聲明打包方式為war
默認(rèn)情況下創(chuàng)建的 Spring Boot 項目打包方式為jar,要將項目打包為WAR包,需要在項目的pom.xml文件中聲明當(dāng)前項目的打包方式為war。打開demo_test1項目的 pom.xml文件,使用<packaging>標(biāo)簽聲明項目打包方式為 war,如圖。

(2)排除內(nèi)置 Tomcat
Spring Boot 為項目提供了內(nèi)嵌的 Tomcat 服務(wù)器,使用外部的 Tomcat 時,需要在 pom.xml文件中排除內(nèi)置的Tomcat,具體代碼如下。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency> 在上述代碼中,在spring-boot-starter-web的依賴中使用<exclusion>標(biāo)簽聲明排除該啟
動器中的 Tomcat。
(3)添加Tomcat 依賴
排除內(nèi)置的Tomcat后,需要在 pom.xml文件中手動添加 Tomcat的依賴,以便在后續(xù)開發(fā)中使用對應(yīng)的 API,具體代碼如下。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--僅在編譯和測試階段使用,不會被打包到war包中-->
<scope>provided</scope>
</dependency>在上述代碼中添加了 Tomcat 的依賴,由于對應(yīng) Tomcat 的依賴只需在編譯和測試階段使用,所以使用<scope>標(biāo)簽將該依賴的作用范圍指定在編譯和測試階段,避免打包時將對應(yīng)的依賴打包到 WAR 包中。
(4)添加插件
在項目的 pom.xml 文件中定義打包插件,以及項目打包后包的名稱具體代碼如下。
<build>
<finalName>demo_test1_war</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
</plugin>
</plugins>
</build>在上述代碼中,使用<finalName>標(biāo)簽用于指定項目打包后的名稱;<plugin>標(biāo)簽用于指定打包插件。
(5)修改 Spring Boot啟動類
Spring Boot啟動項目的方式有很多種,使用外置 Tomcat時,默認(rèn)啟動類需要繼承 SpringBootServletInitializer 類,并重寫configure()方法。SpringBooServletInitializer 執(zhí)行時,會通過重寫的 confgure()方法中的 SpringApplicationBuilder 實例構(gòu)建并封裝 SpringApplication 對象,并最終調(diào)用SpringApplication的run()方法進(jìn)行項目的啟動。修改后的 Spring Boot 啟動類如下面代碼所示。
package com.merlin.demo_test1;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@ServletComponentScan // 開啟基于注解方式的Servlet組件掃描支持
@SpringBootApplication
public class DemoTest1Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DemoTest1Application.class);
}
public static void main(String[] args) {
SpringApplication.run(DemoTest1Application.class, args);
}
} 在上述代碼中,啟動類 DemoTest1Application繼承SpringBootServletInitializer 類并重寫configure()方法,在confgure()方法中,sources(DemoTest1Application.class)方法的參數(shù)必須是項目主程序的啟動類。需要說明的是,為Spring Boot提供啟動的Servlet 初始化器 SpringBootServletInitializer 時,典型的做法就是讓主程序啟動類繼承 SpringBootServletInitializer 類并實現(xiàn) confgure()方法;除此之外,還可以在項目中單獨提供一個繼承 SpringBootServletInitializer 的子類,并實現(xiàn) confgure()方法。
至此,將項目打包為WAR包的準(zhǔn)備工作已經(jīng)完成,下面參照之前使用Maven工具欄中的命令打包項目的過程,將項目進(jìn)行打包,打包后的結(jié)果如圖所示。

從上圖可以看出,控制臺輸出“BUILD SUCCESS”等信息,并且在項目的target 文件夾下創(chuàng)建了項目名稱為demo_test1_war的WAR包,說明成功將項目打包為可執(zhí)行 WAR 包。
錯誤信息:

解決方法:在src/main/webapp/WEB-INF/目錄下創(chuàng)建一個簡單的web.xml文件,內(nèi)容可以是最小化的配置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>然后clean后再package打包一次即可。
2.運行 WAR 包
將打包好的 WAR包復(fù)制到本地Tomcat安裝目錄下的webapps文件夾中,在cmd窗口中執(zhí)行 Tomcat 安裝目錄下 bin 目錄中的 startup.bat 命令啟動 Tomcat。Tomcat 啟動后,執(zhí)行效果如圖所示。

從上圖可以看出,Tomcat啟動成功。Tomcat啟動時會自動解壓Tomcat安裝目錄下的 webapps 文件夾中的 WAR 包,并部署在Tomcat中,此時可以對項目進(jìn)行訪問。需要說明的是,對這種使用外部Tomcat 部署的項目進(jìn)行訪問時,必須加上項目名稱,即打包成WAR 包后的項目全名,例如訪問demo_test1_war項目映射路徑為根目錄,其對應(yīng)的請求地址為“http://http://localhost:8080/demo_test1_war/”,在瀏覽器中的訪問效果如下圖所示。

從上圖可以得出,將打包的 WAR 包部署到外部Tomcat后,可以正常對項目的資源進(jìn)行訪問。
需要注意的是,Spring Boot 2.7.6默認(rèn)內(nèi)嵌 Tomcat 的版本為9.0.69,將指定版本的 Spring Boot 項目以 WAR 包形式部署到外部Tomcat 中時,應(yīng)盡量使用與 Spring Boot 項目匹配的Tomcat 版本進(jìn)行項目部署,否則在部署過程中可能出現(xiàn)異常。
到此這篇關(guān)于Spring Boot項目打包和運行的文章就介紹到這了,更多相關(guān)Spring Boot打包和運行內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue打包部署到springboot并通過tomcat運行的操作方法
- SpringBoot項目打包成war包并部署在tomcat上運行的操作步驟
- SpringBoot項目打包war包時無法運行問題的解決方式
- spring boot項目沒有mainClass如何實現(xiàn)打包運行
- intellij idea 2021.2 打包并上傳運行spring boot項目的詳細(xì)過程(spring boot 2.5.4)
- 一文解決springboot打包成jar文件無法正常運行的問題
- Springboot jar文件如何打包zip在linux環(huán)境運行
- spring boot項目打包成war在tomcat運行的全步驟
- Spring boot項目打包成jar運行的二種方法
- SpringBoot+Maven 多模塊項目的構(gòu)建、運行、打包實戰(zhàn)
相關(guān)文章
Spring Cloud引入Eureka組件,完善服務(wù)治理
這篇文章主要介紹了Spring Cloud引入Eureka組件,完善服務(wù)治理的過程詳解,幫助大家更好的理解和使用spring cloud,感興趣的朋友可以了解下2021-02-02
基于spring?data?jpa?@query返回map的踩坑記錄
這篇文章主要介紹了基于spring?data?jpa?@query返回map的踩坑記錄,具有很好的參考價值,如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
MyBatis-Plus逆向工程——Generator的使用
這篇文章主要介紹了MyBatis-Plus逆向工程——Generator的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
IDEA中@Autowired自動注入MyBatis?Mapper報紅警告的幾種解決方法
這篇文章主要介紹了IDEA中@Autowired自動注入MyBatis?Mapper報紅警告的幾種解決方法2024-02-02

