SpringBoot項(xiàng)目jar和war打包部署方式詳解
jar與war
Spring Boot項(xiàng)目開(kāi)發(fā)完成后,需要以jar或war的方式將項(xiàng)目打包部署到測(cè)試開(kāi)發(fā)環(huán)境。
jar即Java Archive,是Java歸檔文件,該文件格式與平臺(tái)無(wú)關(guān),它允許將許多文件組合成一個(gè)壓縮文件。Java程序都可以打成jar包,目前Docker廣泛使用,Java項(xiàng)目都會(huì)打成可執(zhí)行的jar包,最終構(gòu)建為鏡像文件來(lái)運(yùn)行。
jar文件格式基于流行的ZIP文件格式。與ZIP文件不同的是,jar文件不僅用于壓縮和發(fā)布,而且還用于部署和封裝庫(kù)、組件和插件程序,并可被編譯器和JVM直接使用。在jar中包含特殊的文件(如manifests和部署描述符),用來(lái)指示工具如何處理特定的jar。
war(Web Application Archive)與jar的基本原理相似,它通常表示這是一個(gè)Java的Web應(yīng)用程序包,是一個(gè)可以直接運(yùn)行的Web壓縮包,通常用于網(wǎng)站開(kāi)發(fā),制成war包后部署到容器中(Tomcat或者Jetty)。以Tomcat為例,將war包放置在Tomcat的webapps目錄下,再啟動(dòng)Tomcat,war包會(huì)自動(dòng)解壓,然后通過(guò)瀏覽器訪問(wèn),Tomcat會(huì)識(shí)別war包并自動(dòng)部署。
注意:war包必須放在webapps下的ROOT目錄下,否則訪問(wèn)時(shí)需要加上該目錄的名稱。
在早期的Servlet和JSP項(xiàng)目中,最終生成的war壓縮包文件按照目錄結(jié)構(gòu)來(lái)組織,其根目錄下包含js和jsp文件,或者包含這兩種文件的目錄,另外還有WEB-INF目錄。
在WEB-INF目錄下通常包含一個(gè)web.xml文件和一個(gè)classes目錄,web.xml是這個(gè)應(yīng)用的配置文件,而classes目錄下則包含編譯好的Servlet類和jsp,或包含Servlet所依賴的其他類,如JavaBean。
jar包部署運(yùn)行
下面演示將程序打包成jar后運(yùn)行。
(1)創(chuàng)建一個(gè)空項(xiàng)目springboot-demo-deploy,并添加項(xiàng)目依賴。
添加依賴后的pom.xml如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.10.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>springboot-demo-deploy</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-demo-deploy</name> <description>Demo project for Spring Boot</description> <!-- 設(shè)置打包方式為jar --> <packaging>jar</packaging> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
(2)修改application.properties,添加配置文件
代碼如下:
#排除靜態(tài)文件夾 spring.devtools.restart.exclude=static/**,public/** #關(guān)閉Thymeleaf的緩存,開(kāi)發(fā)過(guò)程中無(wú)須重啟 spring.thymeleaf.cache = false #設(shè)置thymeleaf頁(yè)面的編碼 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.mode=HTML5 #設(shè)置thymeleaf頁(yè)面的后綴 spring.thymeleaf.suffix=.html #設(shè)置thymeleaf頁(yè)面的存儲(chǔ)路徑 spring.thymeleaf.prefix=classpath:/templates/
(3)完成一個(gè)非常簡(jiǎn)單的HelloController()方法
代碼如下:
package com.example.springbootdemodeploy.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/queryUser") public String queryUser(@RequestParam("name")String name){ return "/hi "+name; } }
(4)新建訪問(wèn)入口UserController
代碼如下:
package com.example.springbootdemodeploy.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; @Controller public class UserController { @GetMapping("/hi") public String queryUser(@RequestParam("name") String name, Model model) { model.addAttribute("name", "hi " + name); return "hi"; } }
(5)設(shè)置項(xiàng)目的啟動(dòng)類,代碼如下:
package com.example.springbootdemodeploy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringbootDemoDeployApplication { public static void main(String[] args) { SpringApplication.run(SpringbootDemoDeployApplication.class, args); } }
啟動(dòng)項(xiàng)目,分別訪問(wèn)兩個(gè)鏈接,即http://localhost:8080/hi?name=cc和http://localhost:8080/queryUser?name=cc,得到正確的返回結(jié)果。
現(xiàn)在將整個(gè)項(xiàng)目生成一個(gè)jar包,并運(yùn)行該jar包,再次訪問(wèn)上述兩個(gè)鏈接。
在項(xiàng)目的根目錄下運(yùn)行Maven命令mvn package-DMaven.test.skip=true,該命令會(huì)打包項(xiàng)目且跳過(guò)測(cè)試,構(gòu)建成功的jar在target目錄下,名稱為springboot-demo-deploy-0.0.1-SNAPSHOT.jar。
在當(dāng)前目錄下運(yùn)行java -jar springboot-demo-deploy-0.0.1-SNAPSHOT.jar命令,啟動(dòng)這個(gè)jar包,打開(kāi)瀏覽器,訪問(wèn)http://localhost:8080/hi?name=cc和http://localhost:8080/queryUser?name=cc,能看到正確的返回結(jié)果。
war包部署運(yùn)行
下面演示將上述程序打包成war后運(yùn)行。
(1)修改pom.xml中的<packaging>jar</packaging>
為<packaging>war</packaging>
,表示項(xiàng)目的打包方式變成war。
(2)在pom.xml中添加Tomcat的依賴,代碼如下:
<!--當(dāng)將war包配置到Tomcat時(shí),自動(dòng)排除內(nèi)置的Tomcat,避免二者產(chǎn)生沖突--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!--Tomcat依賴只參與編譯、測(cè)試和運(yùn)行等周期。--> <scope>provided</scope> </dependency>
(3)修改build標(biāo)簽,在<build></build>
標(biāo)簽內(nèi)指定war文件的名稱。這里設(shè)置war包的名稱為springboot-demo-deploy,代碼如下:
<build> <finalName>springboot-demo-deploy</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <excludes> <exclude> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </exclude> </excludes> </configuration> </plugin> </plugins> </build>
(4)修改啟動(dòng)類,并繼承SpringBootServletInitializer類,然后重寫config方法,代碼如下:
package com.example.springbootdemodeploy; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServlet Initializer; @SpringBootApplication public class SpringbootDemoDeployApplication extends SpringBootServlet Initializer { public static void main(String[] args) { SpringApplication.run(SpringbootDemoDeployApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilderbuilder) { return builder.sources(SpringbootDemoDeployApplication.class); } }
(5)在項(xiàng)目的根目錄下再次執(zhí)行mvn clean package-DMaven.test.skip=true命令,項(xiàng)目會(huì)自動(dòng)打包為war,打包成功后的文件保存在target目錄下。
把springboot-demo-deploy.war復(fù)制到Tomcat的ROOT目錄下,再執(zhí)行bin目錄下的startup.bat就能啟動(dòng)該項(xiàng)目。
打開(kāi)瀏覽器,訪問(wèn)http://localhost:8080/hi?name=cc和http://localhost:8080/queryUser?name=cc,可以看到顯示正常,war包部署成功。
以上就是SpringBoot項(xiàng)目jar和war打包部署方式詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot jar war打包部署的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- springboot項(xiàng)目打包成jar包的圖文教程
- Springboot打包成jar發(fā)布的操作方法
- SpringBoot程序打包失敗(.jar中沒(méi)有主清單屬性)
- SpringBoot?如何將項(xiàng)目打包成?jar?包
- springboot打包jar中沒(méi)有主清單屬性問(wèn)題
- IDEA在SpringBoot項(xiàng)目使用Maven打包后jar包太小問(wèn)題及解決
- Springboot項(xiàng)目打包如何將依賴的jar包輸出到指定目錄
- SpringBoot項(xiàng)目實(shí)現(xiàn)jar包方式打包部署
- SpringBoot項(xiàng)目打包為JAR文件的實(shí)現(xiàn)
相關(guān)文章
學(xué)習(xí)不同 Java.net 語(yǔ)言中類似的函數(shù)結(jié)構(gòu)
這篇文章主要介紹了學(xué)習(xí)不同 Java.net 語(yǔ)言中類似的函數(shù)結(jié)構(gòu),函數(shù)式編程語(yǔ)言包含多個(gè)系列的常見(jiàn)函數(shù)。但開(kāi)發(fā)人員有時(shí)很難在語(yǔ)言之間進(jìn)行切換,因?yàn)槭煜さ暮瘮?shù)具有不熟悉的名稱。函數(shù)式語(yǔ)言傾向于基于函數(shù)范例來(lái)命名這些常見(jiàn)函數(shù)。,需要的朋友可以參考下2019-06-06Java Spring WEB應(yīng)用實(shí)例化如何實(shí)現(xiàn)
這篇文章主要介紹了Java Spring WEB應(yīng)用實(shí)例化如何實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12通過(guò)springboot+mybatis+druid配置動(dòng)態(tài)數(shù)據(jù)源
這篇文章主要介紹了通過(guò)springboot+mybatis+druid配置動(dòng)態(tài)數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06Javafx簡(jiǎn)單實(shí)現(xiàn)【我的電腦資源管理器】效果
這篇文章主要介紹了Javafx簡(jiǎn)單實(shí)現(xiàn)【我的電腦資源管理器】效果,涉及Javafx操作系統(tǒng)文件模擬資源管理器的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09Java基礎(chǔ)知識(shí)之成員變量和局部變量淺顯易懂總結(jié)
從語(yǔ)法形式上,看成員變量是屬于類的,而局部變量是在方法中定義的變量或是方法的參數(shù);成員變量可以被public,private,static等修飾符所修飾,而局部變量不能被訪問(wèn)控制修飾符及static所修飾2021-09-09Mybatis-Plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例
面對(duì)復(fù)雜多變的業(yè)務(wù)需求,動(dòng)態(tài)表名的處理變得愈發(fā)重要,本文主要介紹了Mybatis-Plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07Java中的super關(guān)鍵字_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Java中的super關(guān)鍵字的相關(guān)知識(shí),需要的朋友參考下2017-04-04Java設(shè)計(jì)模式七大原則之里氏替換原則詳解
在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,里氏替換原則(Liskov Substitution principle)是對(duì)子類型的特別定義。本文將為大家詳細(xì)介紹Java設(shè)計(jì)模式七大原則之一的里氏替換原則,需要的可以參考一下2022-02-02