SpringBoot項目jar和war打包部署方式詳解
jar與war
Spring Boot項目開發(fā)完成后,需要以jar或war的方式將項目打包部署到測試開發(fā)環(huán)境。
jar即Java Archive,是Java歸檔文件,該文件格式與平臺無關(guān),它允許將許多文件組合成一個壓縮文件。Java程序都可以打成jar包,目前Docker廣泛使用,Java項目都會打成可執(zhí)行的jar包,最終構(gòu)建為鏡像文件來運行。
jar文件格式基于流行的ZIP文件格式。與ZIP文件不同的是,jar文件不僅用于壓縮和發(fā)布,而且還用于部署和封裝庫、組件和插件程序,并可被編譯器和JVM直接使用。在jar中包含特殊的文件(如manifests和部署描述符),用來指示工具如何處理特定的jar。
war(Web Application Archive)與jar的基本原理相似,它通常表示這是一個Java的Web應(yīng)用程序包,是一個可以直接運行的Web壓縮包,通常用于網(wǎng)站開發(fā),制成war包后部署到容器中(Tomcat或者Jetty)。以Tomcat為例,將war包放置在Tomcat的webapps目錄下,再啟動Tomcat,war包會自動解壓,然后通過瀏覽器訪問,Tomcat會識別war包并自動部署。
注意:war包必須放在webapps下的ROOT目錄下,否則訪問時需要加上該目錄的名稱。
在早期的Servlet和JSP項目中,最終生成的war壓縮包文件按照目錄結(jié)構(gòu)來組織,其根目錄下包含js和jsp文件,或者包含這兩種文件的目錄,另外還有WEB-INF目錄。
在WEB-INF目錄下通常包含一個web.xml文件和一個classes目錄,web.xml是這個應(yīng)用的配置文件,而classes目錄下則包含編譯好的Servlet類和jsp,或包含Servlet所依賴的其他類,如JavaBean。
jar包部署運行
下面演示將程序打包成jar后運行。
(1)創(chuàng)建一個空項目springboot-demo-deploy,并添加項目依賴。
添加依賴后的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的緩存,開發(fā)過程中無須重啟 spring.thymeleaf.cache = false #設(shè)置thymeleaf頁面的編碼 spring.thymeleaf.encoding=UTF-8 spring.thymeleaf.mode=HTML5 #設(shè)置thymeleaf頁面的后綴 spring.thymeleaf.suffix=.html #設(shè)置thymeleaf頁面的存儲路徑 spring.thymeleaf.prefix=classpath:/templates/
(3)完成一個非常簡單的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)新建訪問入口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è)置項目的啟動類,代碼如下:
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); } }
啟動項目,分別訪問兩個鏈接,即http://localhost:8080/hi?name=cc和http://localhost:8080/queryUser?name=cc,得到正確的返回結(jié)果。
現(xiàn)在將整個項目生成一個jar包,并運行該jar包,再次訪問上述兩個鏈接。
在項目的根目錄下運行Maven命令mvn package-DMaven.test.skip=true,該命令會打包項目且跳過測試,構(gòu)建成功的jar在target目錄下,名稱為springboot-demo-deploy-0.0.1-SNAPSHOT.jar。
在當(dāng)前目錄下運行java -jar springboot-demo-deploy-0.0.1-SNAPSHOT.jar命令,啟動這個jar包,打開瀏覽器,訪問http://localhost:8080/hi?name=cc和http://localhost:8080/queryUser?name=cc,能看到正確的返回結(jié)果。
war包部署運行
下面演示將上述程序打包成war后運行。
(1)修改pom.xml中的<packaging>jar</packaging>
為<packaging>war</packaging>
,表示項目的打包方式變成war。
(2)在pom.xml中添加Tomcat的依賴,代碼如下:
<!--當(dāng)將war包配置到Tomcat時,自動排除內(nèi)置的Tomcat,避免二者產(chǎn)生沖突--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <!--Tomcat依賴只參與編譯、測試和運行等周期。--> <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)修改啟動類,并繼承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)在項目的根目錄下再次執(zhí)行mvn clean package-DMaven.test.skip=true命令,項目會自動打包為war,打包成功后的文件保存在target目錄下。
把springboot-demo-deploy.war復(fù)制到Tomcat的ROOT目錄下,再執(zhí)行bin目錄下的startup.bat就能啟動該項目。
打開瀏覽器,訪問http://localhost:8080/hi?name=cc和http://localhost:8080/queryUser?name=cc,可以看到顯示正常,war包部署成功。
以上就是SpringBoot項目jar和war打包部署方式詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot jar war打包部署的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
學(xué)習(xí)不同 Java.net 語言中類似的函數(shù)結(jié)構(gòu)
這篇文章主要介紹了學(xué)習(xí)不同 Java.net 語言中類似的函數(shù)結(jié)構(gòu),函數(shù)式編程語言包含多個系列的常見函數(shù)。但開發(fā)人員有時很難在語言之間進(jìn)行切換,因為熟悉的函數(shù)具有不熟悉的名稱。函數(shù)式語言傾向于基于函數(shù)范例來命名這些常見函數(shù)。,需要的朋友可以參考下2019-06-06Java Spring WEB應(yīng)用實例化如何實現(xiàn)
這篇文章主要介紹了Java Spring WEB應(yīng)用實例化如何實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12通過springboot+mybatis+druid配置動態(tài)數(shù)據(jù)源
這篇文章主要介紹了通過springboot+mybatis+druid配置動態(tài)數(shù)據(jù)源,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下2019-06-06Java基礎(chǔ)知識之成員變量和局部變量淺顯易懂總結(jié)
從語法形式上,看成員變量是屬于類的,而局部變量是在方法中定義的變量或是方法的參數(shù);成員變量可以被public,private,static等修飾符所修飾,而局部變量不能被訪問控制修飾符及static所修飾2021-09-09Mybatis-Plus動態(tài)表名的實現(xiàn)示例
面對復(fù)雜多變的業(yè)務(wù)需求,動態(tài)表名的處理變得愈發(fā)重要,本文主要介紹了Mybatis-Plus動態(tài)表名的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下2024-07-07Java中的super關(guān)鍵字_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了Java中的super關(guān)鍵字的相關(guān)知識,需要的朋友參考下2017-04-04