SpringBoot(三)之打包方式

SpringBoot(三)之打包方式

Spring Boot 提供了幾種常見的打包方式,具體取決于你的項目需求和偏好:

  1. JAR(可執行的JAR文件): 這是 Spring Boot 的默認打包方式。它將項目的所有依賴打包到一個可執行的 JAR 文件中,包括 Spring Boot 應用程序以及嵌入的 Tomcat 或 Jetty 等服務器。你可以通過運行 java -jar your-application.jar 來啟動應用程序。
  2. WAR(Web應用程序存檔): 如果你需要將 Spring Boot 應用程序部署到外部的 Servlet 容器(如 Tomcat、Jetty 或者 Wildfly),你可以打包為 WAR 文件。在這種情況下,Spring Boot 應用程序不會包含嵌入式的服務器,而是依賴于外部容器來運行。
  3. Executable WAR(可執行的WAR文件): 從 Spring Boot 1.4 版本開始,你可以創建一個可執行的 WAR 文件。這種方式結合了 JAR 和 WAR 的優點。它允許你在外部容器中部署 Spring Boot 應用程序,并且仍然可以像運行 JAR 文件一樣啟動它。你只需要將 WAR 文件部署到 Servlet 容器中即可。
  4. Executable JAR with Dependencies(帶依賴的可執行JAR文件): 有時你可能希望生成一個包含所有依賴的可執行 JAR 文件,而不是將依賴打包到 JAR 文件中。你可以使用 Maven 或 Gradle 插件來實現這一點,例如 Spring Boot Maven 插件或 Spring Boot Gradle 插件。這種方式生成的 JAR 文件會比較大,但可以更容易地與其他項目共享依賴。

以上是一些常見的 Spring Boot 打包方式,你可以根據項目需求選擇適合你的方式。

一、jar包形式

  1. 在 Maven 項目的 pom.xml 文件中,確保你有 spring-boot-starter-parent 作為父項目,并且添加了 spring-boot-maven-plugin 插件。
<project><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.2</version></parent><dependencies><!-- 你的其他依賴 --></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>
  1. 執行mvn clean package,這將在項目的 target 文件夾下生成一個可執行的 JAR 文件。

tips:可跳過tests執行 mvn clean package -DskipTests

  1. cd target 目錄下,執行java -jar 生成的jar包命令運行web項目
 java -jar .\spring-boot-start-0.0.1-SNAPSHOT.jar
  .   ____          _            __ _ _/\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/  ___)| |_)| | | | | || (_| |  ) ) ) )'  |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot ::                (v2.6.4)2024-05-15 11:00:26.009  INFO 19712 --- [           main] c.a.s.SpringBootStartApplication         : Starting SpringBootStartApplication v0.0.1-SNAPSHOT using Java 1.8.0_261 on DESKTOP-SQBHU59 with PID 19712 (D:\practise\spring-all\spring-boot-start\target\spring-boot-start-0.0.1-SNAPSHOT.jar started by aoxiaojun in D:\practise\spring-all\spring-boot-start\target)
2024-05-15 11:00:26.011  INFO 19712 --- [           main] c.a.s.SpringBootStartApplication         : No active profile set, falling back to 1 default profile: "default"
2024-05-15 11:00:27.095  INFO 19712 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 1010 (http)
2024-05-15 11:00:27.106  INFO 19712 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2024-05-15 11:00:27.106  INFO 19712 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.58]
2024-05-15 11:00:27.156  INFO 19712 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2024-05-15 11:00:27.157  INFO 19712 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1105 ms
2024-05-15 11:00:27.198  INFO 19712 --- [           main] f.a.AutowiredAnnotationBeanPostProcessor : Autowired annotation should only be used on methods with parameters: public java.lang.String cn.axj.springbootstart.controller.TestController.test()
2024-05-15 11:00:27.447  INFO 19712 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 1010 (http) with context path ''
2024-05-15 11:00:27.453  INFO 19712 --- [           main] c.a.s.SpringBootStartApplication         : Started SpringBootStartApplication in 1.761 seconds (JVM running for 2.13)

二、war包

對于那種項目需要經常更新某個文件的情況,可以將springboot項目打包成war包,便于更新某些文件,而不用打整包的形式上線。打成war后需要依賴外部的serlvet容器運行,如tomcat,jetty等。

  1. 修改啟動類: 需要修改 Spring Boot 應用程序的啟動類,以擴展 SpringBootServletInitializer 類,并覆蓋 configure 方法。這個類負責初始化 Servlet 容器,并加載 Spring 應用程序上下文。
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;public class ServletInitializer extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(YourSpringBootApplication.class);}}
  1. 修改maven配置
<packaging>war</packaging>
<dependencies><!-- 排除內嵌的容器依賴 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency>
</dependencies>
  1. 執行mvn clean package
  2. 部署 WAR 文件: 構建成功后,WAR 文件會生成在目標文件夾下(通常是 target 目錄),你可以將生成的 WAR 文件部署到外部的 Servlet 容器中。

三、Executable WAR

可執行的war包,可以通過java -jar命令直接運行,也可以在外部容器中部署和運行

  1. 在 Maven 項目的 pom.xml 文件中,確保你有 spring-boot-starter-parent 作為父項目,并且添加了 spring-boot-maven-plugin 插件。同時,將 <executable> 設置為 true
<packaging>war</packaging>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><executable>true</executable></configuration></plugin></plugins>
</build>
  1. 執行 mvn clean package
  2. 在可以通過java -jar 命令執行war文件。
 java -jar .\target\spring-boot-start-0.0.1-SNAPSHOT.war

四、Executable JAR with Dependencies(基本不用)

Spring Boot 的可執行 JAR 文件和帶依賴的可執行 JAR 文件之間有一些區別:

  1. 可執行 JAR 文件: Spring Boot 的可執行 JAR 文件是指將應用程序本身和其依賴的庫(例如 Spring Boot 框架、第三方庫等)打包到一個獨立的 JAR 文件中。這個 JAR 文件包含了所有需要的類文件和資源文件,以及一個 MANIFEST.MF 文件,指定了應用程序的入口點。你可以通過運行 java -jar your-application.jar 來啟動應用程序。
  2. 帶依賴的可執行 JAR 文件: 帶依賴的可執行 JAR 文件是指將應用程序本身以及其依賴的所有庫打包到一個 JAR 文件中。不同之處在于,帶依賴的 JAR 文件會將所有依賴的庫直接包含在 JAR 文件中,而不是像普通的可執行 JAR 文件那樣僅包含應用程序本身的類和資源。這意味著生成的 JAR 文件會更大,因為它包含了所有依賴的庫。這種方式使得 JAR 文件更加獨立,可以更容易地與其他項目共享,并且無需依賴外部的庫。

總的來說,帶依賴的可執行 JAR 文件包含了應用程序本身和所有依賴的庫,而普通的可執行 JAR 文件只包含了應用程序本身。選擇哪種方式取決于你的項目需求和偏好,如果你希望生成一個獨立的、包含所有依賴的 JAR 文件,可以選擇帶依賴的可執行 JAR 文件;如果你希望生成一個輕量級的 JAR 文件,并且不包含依賴的庫,可以選擇普通的可執行 JAR 文件。

要配置生成帶有依賴的可執行 JAR 文件,你可以使用 Maven Assembly 插件或 Maven Shade 插件。以下是詳細的配置步驟:

使用 Maven Assembly 插件:

  1. 在 Maven 項目的 pom.xml 文件中,添加 Maven Assembly 插件,并配置以生成帶有依賴的可執行 JAR 文件。
<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><version>3.3.0</version><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs><archive><manifest><!--							主類全限定名稱--><mainClass>com.example.MainClass</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins>
</build>
  1. mainClass 元素中指定主類的完全限定名,這是可執行 JAR 文件的入口點。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12639.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12639.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12639.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3D 生成重建009-DreamGaussian使用gaussian splatting在兩分鐘內生成3d

3D 生成重建009-DreamGaussian使用gaussian splatting在兩分鐘內生成3d 文章目錄 0 論文工作1 論文方法2 效果 0 論文工作 DreamGaussian是第一個使用gaussian splatting方法進行3d生成的工作。論文最先使用gaussian splatting替代原來用nerf表示3d。整體架構依然保留了原來的…

Jackson XML

Jackson XML 1 添加依賴2 XML轉對象3 對象轉XML4 根據路徑讀取 1 添加依賴 <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.11.3</version> </de…

在Spring的try-catch塊中手動實現事務回滾

在Spring應用開發中&#xff0c;Transactional注解為我們提供了強大的聲明式事務管理能力&#xff0c;使得我們能夠專注于業務邏輯而無需過多關注底層的事務處理細節。然而&#xff0c;在某些特定場景下&#xff0c;開發者可能需要在捕獲到特定異常時手動控制事務的回滾行為。本…

VMware Workstation Pro 和 Fusion Pro 針對個人用戶使用免費了

今早看到 VMware by Broadcom 官方博客 VMware Desktop Hypervisor Pro Apps Now Available for Personal Use - VMware Cloud Foundation (VCF) Blog 以及 Learn more about VMware Desktop Hypervisor Products Subscription Model 總結如下&#xff1a; 免費 Player 版本將…

python中sys和os簡單樣例說明

目錄 一、sys模塊及簡單樣例 1.1 訪問命令行參數&#xff1a; 1.2 退出程序&#xff1a; 1.3 獲取Python 解釋器的版本信息 1.4 設置遞歸深度限制及修改默認的編碼&#xff1a; 二、os模塊及簡單樣例 2.1 獲取當前工作目錄&#xff1a; 2.2 更改工作目錄&#xff1a; 2…

VBA 引用從SQL數據庫取數據的幾個方法

首先&#xff0c;要定義連接的數據集 Set objRec CreateObject("ADODB.Recordset")Set objConn CreateObject("ADODB.Connection")然后在代碼中要定義SQL語句&#xff0c;以便獲取數據 sqlstr sqlstr " select t1.FBillNo ,t_Item.fname type,t1…

OpenAI 重磅發布GPT 4o!可以視頻聊天的AI?

OpenAI 重磅發布GPT 4o&#xff01; 前言 就在今日&#xff0c;OpenAI發布了ChatGPT-4o版本&#xff0c;技術主管 Mira Murati 在直播中表示GPT-4o對比之前版本速度更快&#xff0c;在文本、視頻和音頻方面的能力也都有所提高。值得注意的是它還可以讓用戶與 ChatGPT 進行視頻聊…

通電即用,極簡運維:帶您10分鐘零配置啟動超大型園區網絡

為順應數字經濟發展潮流&#xff0c;越來越多企業選擇云網融合&#xff0c;這給企業園區的運維人員&#xff0c;特別是中大型企業園區的運維人員帶來新的挑戰&#xff1a;隨著企業規模擴大&#xff0c;系統和應用程序的復雜性也在增加&#xff0c;運維人員需要不斷學習新技術&a…

多維 HighChart

showHighChart.html <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><!-- js腳本都是官方的,后兩個是highchart腳本 --><script type"text/javascript" src"jquery1.7.1.min.js"&g…

天銳綠盾和bitlocker有啥區別?

#綠盾文檔加密系統# 天銳綠盾和BitLocker是兩種不同的數據加密解決方案&#xff0c;它們各自有不同的重點和應用場景&#xff0c;以下是它們之間的主要區別&#xff1a; PC地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 移動…

Markdown 高級表格控制 ∈ Markdown 使用筆記

文章目錄 Part.I IntroductionPart.II 表格樣式控制Chap.I 對齊方式Chap.II 表格中文本控制Chap.III 單元格合并Chap.IV 顏色控制 Part.III 實用技巧Chap.I Excel 轉 HTML Reference Part.I Introduction 本文是 Markdown 使用筆記 的子博客&#xff0c;將介紹如何優雅地使用 …

信道分配(C++)

#include <iostream> #include <sstream> #include <vector> #include <algorithm> using namespace std;//每個信道只能分配給一個用戶 //一個用戶可以分配多個信道int get_count(vector<int> pre, vector<int> arr, int n){int count 0…

go面向對象-匿名字段

接口 go支持只提供類型而不寫字段名的方式&#xff0c;也就是匿名字段&#xff0c;也稱為嵌入字段 package mainimport "fmt"//? go支持只提供類型而不寫字段名的方式&#xff0c;也就是匿名字段&#xff0c;也稱為嵌入字段//人 type Person struct {name stri…

寒冷地區污水處理一體化設備如何選型

在寒冷地區選擇污水處理一體化設備時&#xff0c;需要特別考慮設備的耐寒性能和處理效率&#xff0c;以確保在低溫環境下仍能穩定運行并達到預期的處理效果。以下是一些選型時需要考慮的關鍵因素&#xff1a; 耐寒設計&#xff1a;選擇具有耐寒設計的設備&#xff0c;例如&…

[AWS] stepfunctions-local

本質是本地docker&#xff0c;只支持異步調用 run aws-stepfunctions-local docker run -p 8083:8083 \ --mount typebind,readonly,source/path/MockConfigFile.json,destination/home/StepFunctionsLocal/MockConfigFile.json \ -e SFN_MOCK_CONFIG"/home/StepFuncti…

企業微信推送報錯40056

企業微信推送&#xff0c;報錯 {"errCode":40056,"message":"weixin qy api errcode : 40056","result":99} 原因&#xff1a; 研究院的項目是新開的&#xff0c;雖然用的端華的配置信息&#xff0c;但應用沒有授權&#xff0c;導致該…

論:即時戰略RTS游戲的小地圖采用 自下而上的匯報式 還是 自上而下的查找式?

關鍵詞&#xff1a;RTS 小地圖 游戲設計 思路 衛星 位置映射 陣營 更新 匯報 詢問 UE4 UE5 Unreal Engine 前言 你是否想過類似紅色警戒的戰略小地圖的要素是采用何種方式更新數據的。大量數據實時更新&#xff0c;考慮頻率&#xff0c;運行效率&#xff0c;開發中如何選型&a…

SysML需求圖的七種關系

SysML&#xff08;系統建模語言&#xff09;中的需求圖定義了七種主要的關系來描述需求之間的關聯。這些關系幫助構建了需求的邏輯框架&#xff0c;提供了需求管理的系統性方法。以下是這七種關系的簡要描述&#xff1a; 包含&#xff08;Containment&#xff09;&#xff1a;…

MATLAB中的數據類型主要包括數值類型、邏輯類型、字符型、函數句柄、結構體和單元數組類型

文章目錄 數值類型邏輯類型字符串字符串的構造 函數句柄結構體類型數組類型單元數組map容器 MATLAB中的數據類型主要包括數值類型、邏輯類型、字符型、函數句柄、結構體和單元數組類型。 數值類型 數值類型主要有整數、單精度浮點數和雙精度浮點數。對于運算結果的整數類型溢出…

111111111111111111

11111111111111111111111111111