欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring Boot Maven 插件如何構(gòu)建可執(zhí)行 JAR 的核心配置

 更新時間:2025年07月17日 15:18:08   作者:李少兄  
SpringBoot核心Maven插件,用于生成可執(zhí)行JAR/WAR,內(nèi)置服務(wù)器簡化部署,支持熱部署、多環(huán)境配置及依賴管理,提升開發(fā)效率與構(gòu)建靈活性,本文給大家介紹Spring Boot Maven 插件如何構(gòu)建可執(zhí)行JAR的核心配置,感興趣的朋友一起看看吧

前言

在 Java 生態(tài)中,Spring Boot 以其“約定優(yōu)于配置”的理念和開箱即用的特性,成為現(xiàn)代應(yīng)用開發(fā)的首選框架。而 spring-boot-maven-plugin 作為 Spring Boot 的核心插件,承擔(dān)著將應(yīng)用打包為可執(zhí)行 JAR/WAR 的關(guān)鍵角色。

一、插件的核心功能與目標(biāo)

1.1 插件的定位

spring-boot-maven-plugin 是 Spring Boot 提供的 Maven 插件,其核心目標(biāo)是:

  • 可執(zhí)行包生成:將應(yīng)用及其依賴打包為獨(dú)立的 JAR/WAR 文件,支持通過 java -jar 直接運(yùn)行。
  • 生命周期管理:在集成測試階段啟動/停止應(yīng)用,支持自動化測試。
  • 構(gòu)建信息管理:生成 build-info.properties 文件,供 Actuator 等組件使用。
  • 熱部署支持:與 Spring Boot DevTools 集成,實(shí)現(xiàn)代碼修改后的自動重啟。

1.2 插件的 Goals(目標(biāo))

該插件定義了 5 個核心目標(biāo)(Goal),分別對應(yīng)不同的構(gòu)建階段:

Goal作用
repackagemvn package 后重新打包,生成可執(zhí)行的 JAR/WAR(保留原始包為 .origin 文件)。
run通過 mvn spring-boot:run 直接運(yùn)行應(yīng)用,無需顯式打包。
start在集成測試階段啟動應(yīng)用(非阻塞),常用于測試前的初始化。
stop在集成測試完成后停止由 start 啟動的應(yīng)用。
build-info生成 build-info.properties 文件,記錄項(xiàng)目版本、構(gòu)建時間等元信息。

1.3 插件定位

spring-boot-maven-plugin 是 Spring Boot 提供的官方 Maven 插件,其核心目標(biāo)是將 Spring Boot 應(yīng)用程序打包為可獨(dú)立運(yùn)行的 JAR 或 WAR 文件。與傳統(tǒng) Maven 打包方式不同,該插件生成的可執(zhí)行文件內(nèi)置了嵌入式服務(wù)器(如 Tomcat、Jetty),無需依賴外部容器即可運(yùn)行,極大簡化了部署流程。

1.4 核心功能

  • 可執(zhí)行文件打包:將應(yīng)用及其所有依賴打包為單一 JAR/WAR,支持 java -jar 直接運(yùn)行。
  • 生命周期管理:支持集成測試階段的應(yīng)用啟動與停止。
  • 開發(fā)者工具集成:結(jié)合 Spring Boot DevTools 實(shí)現(xiàn)熱部署。
  • 構(gòu)建信息生成:生成 build-info.properties 文件,記錄項(xiàng)目元數(shù)據(jù)。

二、核心配置詳解

2.1 <mainClass>:指定入口類

<configuration>
    <mainClass>com.example.Application</mainClass>
</configuration>
  • 作用:定義應(yīng)用的主類(包含 @SpringBootApplication 注解的類)。
  • 原理:插件會在生成的 JAR 包的 MANIFEST.MF 中寫入以下內(nèi)容:
    Main-Class: org.springframework.boot.loader.JarLauncher
    Start-Class: com.example.Application
  • 注意事項(xiàng)
    • 若未顯式配置,插件會自動掃描項(xiàng)目中帶有 @SpringBootApplication 的類。
    • 對于多模塊項(xiàng)目,需確保主類路徑正確,避免沖突。

2.2 <skip>:跳過插件執(zhí)行

<configuration>
    <skip>true</skip>
</configuration>
  • 作用:控制是否跳過 repackage 等操作。
  • 適用場景
    • 快速構(gòu)建時僅生成普通 JAR(如 mvn package 后直接部署)。
    • 調(diào)試階段避免重復(fù)打包。
  • 默認(rèn)值false。

2.3 <includeSystemScope>:包含系統(tǒng)依賴

<configuration>
    <includeSystemScope>true</includeSystemScope>
</configuration>
  • 作用:是否將 system 作用域的依賴(通過 <systemPath> 引入的本地 JAR)包含到最終包中。
  • 風(fēng)險提示
    • 系統(tǒng)依賴依賴于本地路徑,可能導(dǎo)致構(gòu)建不可移植。
    • 建議:優(yōu)先使用 filemaven 倉庫管理依賴。

2.4 <layout>:定義打包格式

<configuration>
    <layout>JAR</layout>
</configuration>
  • 支持的值

    描述
    JAR可執(zhí)行 JAR,使用 JarLauncher 啟動(默認(rèn)值)。
    WAR可執(zhí)行 WAR,使用 WarLauncher 啟動,需配置 servlet 容器。
    ZIP類似 JAR 的 ZIP 包,使用 PropertiesLauncher 啟動。
    NONE僅打包依賴,不包含 Spring Boot 啟動器(不可執(zhí)行)。
    MODULE打包依賴庫(排除 provided 作用域),不包含啟動器。
  • 選擇策略

    • Web 應(yīng)用優(yōu)先使用 WAR
    • 微服務(wù)或獨(dú)立應(yīng)用使用 JAR。
    • 高度定制化場景選擇 NONEMODULE。

2.5 <executions>:綁定構(gòu)建生命周期

(1) repackage 目標(biāo)

<executions>
    <execution>
        <id>repackage</id>
        <goals>
            <goal>repackage</goal>
        </goals>
    </execution>
</executions>
  • 作用:將 repackage 目標(biāo)綁定到 package 階段。
  • 結(jié)果:執(zhí)行 mvn package 后,插件會自動生成可執(zhí)行包,并覆蓋原始包(保留為 .origin 文件)。
  • 生成結(jié)構(gòu)
    your-app.jar
    ├── META-INF/
    │   └── MANIFEST.MF
    ├── org/springframework/boot/loader/  # 啟動類
    └── BOOT-INF/
        ├── classes/  # 項(xiàng)目編譯后的類文件
        └── lib/      # 所有依賴的 .jar 文件
  • 執(zhí)行命令
    mvn clean package
    java -jar target/your-app.jar

(2) run 目標(biāo)

mvn spring-boot:run
  • 作用:直接運(yùn)行 Spring Boot 應(yīng)用,無需打包。
  • 適用場景:快速調(diào)試或開發(fā)階段。

(3) startstop 目標(biāo)

<execution>
    <id>start</id>
    <goals>
        <goal>start</goal>
    </goals>
</execution>
<execution>
    <id>stop</id>
    <goals>
        <goal>stop</goal>
    </goals>
</execution>
  • 作用:在集成測試階段啟動/停止應(yīng)用。
  • 典型流程
    mvn integration-test  # 啟動應(yīng)用
    mvn verify            # 停止應(yīng)用

(4) build-info 目標(biāo)

<execution>
    <goals>
        <goal>build-info</goal>
    </goals>
</execution>
  • 作用:生成 build-info.properties 文件,記錄項(xiàng)目版本、構(gòu)建時間等元數(shù)據(jù)。
  • 文件內(nèi)容示例
    build.artifact=your-app
    build.name=your-app
    build.version=1.0.0
    build.time=2025-07-13T18:14:03Z

三、高級配置與最佳實(shí)踐

3.1 多環(huán)境配置

通過 <profiles> 動態(tài)切換配置文件:

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <env>dev</env>
        </properties>
    </profile>
    <profile>
        <id>prod</id>
        <properties>
            <env>prod</env>
        </properties>
    </profile>
</profiles>

結(jié)合資源過濾(resources 配置)實(shí)現(xiàn)不同環(huán)境的配置分離。

3.2 與 Spring Boot DevTools 集成

啟用熱部署(HotSwap):

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
  • 效果:代碼修改后,應(yīng)用會自動重啟(無需手動執(zhí)行 mvn package)。

3.3 自定義構(gòu)建信息

通過 build-info 目標(biāo)生成元數(shù)據(jù):

<execution>
    <id>generate-build-info</id>
    <goals>
        <goal>build-info</goal>
    </goals>
    <phase>process-resources</phase>
</execution>

生成的 build-info.properties 示例:

build.artifact=example-app
build.name=example-app
build.version=1.0.0
build.time=2025-07-13T22:00:09Z

四、典型配置示例

4.1 基礎(chǔ)配置

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>${spring-boot.version}</version>
    <configuration>
        <mainClass>com.example.Application</mainClass>
        <skip>false</skip>
        <includeSystemScope>false</includeSystemScope>
        <layout>JAR</layout>
    </configuration>
    <executions>
        <execution>
            <id>repackage</id>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

4.2 高級配置(集成 DevTools 與多環(huán)境)

<profiles>
    <profile>
        <id>dev</id>
        <properties>
            <env>dev</env>
        </properties>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>com.example.Application</mainClass>
                        <layout>JAR</layout>
                    </configuration>
                    <executions>
                        <execution>
                            <id>repackage</id>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

五、常見問題與解決方案

5.1 啟動類未正確識別

  • 現(xiàn)象:運(yùn)行 java -jar app.jar 報錯 No main manifest attribute。
  • 原因:未正確配置 <mainClass> 或自動掃描失敗。
  • 解決方案
    1. 顯式配置 <mainClass>
    2. 確保主類路徑正確(src/main/java/com/example/Application.java)。
    3. 檢查 @SpringBootApplication 注解是否缺失。

5.2 依賴沖突

  • 現(xiàn)象:運(yùn)行時報錯 java.lang.NoSuchMethodError。
  • 原因:依賴版本不一致或存在多個同名 JAR。
  • 解決方案
    • 使用 mvn dependency:tree 分析依賴樹。
    • 通過 <exclusions> 排除沖突依賴。
    • 升級 Spring Boot 版本以獲取最新依賴管理。

5.3 打包后體積過大

  • 現(xiàn)象:生成的 JAR 文件體積異常龐大。
  • 原因:包含大量未使用的依賴或重復(fù)資源。
  • 解決方案
    • 使用 spring-boot-maven-pluginexclude 配置過濾無用依賴。
    • 啟用 spring-boot:repackageskip 模式,僅打包必要依賴。

六、總結(jié)

spring-boot-maven-plugin 是 Spring Boot 項(xiàng)目構(gòu)建的基石,其配置直接影響應(yīng)用的打包效率、運(yùn)行性能及維護(hù)成本。通過合理配置 <mainClass><layout>、<executions> 等參數(shù),開發(fā)者可以靈活控制構(gòu)建流程,適配不同場景需求。同時,結(jié)合 DevTools、多環(huán)境配置等高級特性,能夠顯著提升開發(fā)效率與部署靈活性。

到此這篇關(guān)于Spring Boot Maven 插件如何構(gòu)建可執(zhí)行 JAR 的核心配置的文章就介紹到這了,更多相關(guān)Spring Boot Maven可執(zhí)行jar內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java Switch對各類型支持實(shí)現(xiàn)原理

    Java Switch對各類型支持實(shí)現(xiàn)原理

    這篇文章主要介紹了Java Switch對各類型支持實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Mybatis-Plus默認(rèn)主鍵策略導(dǎo)致自動生成19位長度主鍵id的坑

    Mybatis-Plus默認(rèn)主鍵策略導(dǎo)致自動生成19位長度主鍵id的坑

    這篇文章主要介紹了Mybatis-Plus默認(rèn)主鍵策略導(dǎo)致自動生成19位長度主鍵id的坑,本文一步步給大家分享解決方法,給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • java創(chuàng)建簡易視頻播放器

    java創(chuàng)建簡易視頻播放器

    這篇文章主要為大家詳細(xì)介紹了java創(chuàng)建簡易視頻播放器的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 從零搭建腳手架之集成Spring?Retry實(shí)現(xiàn)失敗重試和熔斷器模式(實(shí)戰(zhàn)教程)

    從零搭建腳手架之集成Spring?Retry實(shí)現(xiàn)失敗重試和熔斷器模式(實(shí)戰(zhàn)教程)

    在我們的大多數(shù)項(xiàng)目中,會有一些場景需要重試操作,而不是立即失敗,讓系統(tǒng)更加健壯且不易發(fā)生故障,這篇文章主要介紹了從零搭建開發(fā)腳手架之集成Spring?Retry實(shí)現(xiàn)失敗重試和熔斷器模式,需要的朋友可以參考下
    2022-07-07
  • Druid(新版starter)在SpringBoot下的使用教程

    Druid(新版starter)在SpringBoot下的使用教程

    Druid是Java語言中最好的數(shù)據(jù)庫連接池,Druid能夠提供強(qiáng)大的監(jiān)控和擴(kuò)展功能,DruidDataSource支持的數(shù)據(jù)庫,這篇文章主要介紹了Druid(新版starter)在SpringBoot下的使用,需要的朋友可以參考下
    2023-05-05
  • java 學(xué)習(xí)筆記(入門篇)_java的基礎(chǔ)語法

    java 學(xué)習(xí)筆記(入門篇)_java的基礎(chǔ)語法

    從基礎(chǔ)語法開始,這個語法你也可以理解為英語或是漢語里面的語法,只不過大家各有各的特點(diǎn)和區(qū)別;那么在學(xué)習(xí)的過程中我們就要不斷的積累重要的類和方法,這樣寫程序就會方便快捷了,下面就開始學(xué)習(xí)java的基礎(chǔ)語法
    2013-01-01
  • Idea公司真牛逼發(fā)行最適合程序員編程字體

    Idea公司真牛逼發(fā)行最適合程序員編程字體

    JetBrains年初的時候推出了一種新字體,即JetBrains Mono,它是專為開發(fā)人員設(shè)計的,非常不錯,喜歡的朋友快來體驗(yàn)吧
    2020-12-12
  • java解析Excel文件的方法實(shí)例詳解

    java解析Excel文件的方法實(shí)例詳解

    在日常工作中,我們常常會進(jìn)行文件讀寫操作,除去我們最常用的純文本文件讀寫,更多時候我們需要對Excel中的數(shù)據(jù)進(jìn)行讀取操作,下面這篇文章主要給大家介紹了關(guān)于java解析Excel文件的方法,需要的朋友可以參考下
    2022-06-06
  • java解析json數(shù)組方式

    java解析json數(shù)組方式

    這篇文章主要介紹了java解析json數(shù)組方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • SpringBoot集成MongoDB的實(shí)現(xiàn)

    SpringBoot集成MongoDB的實(shí)現(xiàn)

    本文主要介紹了SpringBoot集成MongoDB的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01

最新評論