最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間: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)行。
  • 生命周期管理:在集成測試階段啟動(dòng)/停止應(yīng)用,支持自動(dòng)化測試。
  • 構(gòu)建信息管理:生成 build-info.properties 文件,供 Actuator 等組件使用。
  • 熱部署支持:與 Spring Boot DevTools 集成,實(shí)現(xiàn)代碼修改后的自動(dòng)重啟。

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

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

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

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

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

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

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

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

2.4 <layout>:定義打包格式

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

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

    • 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 后,插件會(huì)自動(dòng)生成可執(zhí)行包,并覆蓋原始包(保留為 .origin 文件)。
  • 生成結(jié)構(gòu)
    your-app.jar
    ├── META-INF/
    │   └── MANIFEST.MF
    ├── org/springframework/boot/loader/  # 啟動(dòng)類
    └── 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>
  • 作用:在集成測試階段啟動(dòng)/停止應(yīng)用。
  • 典型流程
    mvn integration-test  # 啟動(dòng)應(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í)間等元數(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> 動(dòng)態(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)用會(huì)自動(dòng)重啟(無需手動(dò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 啟動(dòng)類未正確識(shí)別

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

5.2 依賴沖突

  • 現(xiàn)象:運(yùn)行時(shí)報(bào)錯(cuò) java.lang.NoSuchMethodError。
  • 原因:依賴版本不一致或存在多個(gè)同名 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)建流程,適配不同場景需求。同時(shí),結(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 單元測試之Mockito 模擬靜態(tài)方法與私有方法最佳實(shí)踐

    Java 單元測試之Mockito 模擬靜態(tài)方法與私有方法最佳實(shí)踐

    本文將深入探討如何使用 Mockito 來模擬靜態(tài)方法和私有方法,結(jié)合大量實(shí)戰(zhàn)代碼示例,帶你突破傳統(tǒng)單元測試的邊界,寫出更徹底、更獨(dú)立、更具可讀性的測試用例,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • 基于獲取JAVA路徑,包括CLASSPATH外的路徑的方法詳解

    基于獲取JAVA路徑,包括CLASSPATH外的路徑的方法詳解

    本篇文章是對獲取JAVA路徑,包括CLASSPATH外的路徑的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • java實(shí)現(xiàn)推箱子小游戲

    java實(shí)現(xiàn)推箱子小游戲

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)推箱子小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • Spring?Boot?快速使用?HikariCP?連接池配置詳解

    Spring?Boot?快速使用?HikariCP?連接池配置詳解

    Spring Boot 2.x 將其作為默認(rèn)的連接池組件,項(xiàng)目中添加 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa 模塊后,HikariCP 依賴會(huì)被自動(dòng)引入,這篇文章主要介紹了Spring?Boot使用HikariCP連接池配置詳解,需要的朋友可以參考下
    2023-06-06
  • Spring中bean對象的裝配方式、作用域及生命周期詳解

    Spring中bean對象的裝配方式、作用域及生命周期詳解

    這篇文章主要介紹了Spring中bean對象的裝配方式、作用域及生命周期詳解,SprignBoot中?@Bean?完美的替換了了上面的這種在xml中配置的方法,使用以下方法就能讓spring在需要自動(dòng)創(chuàng)建Info對象時(shí),自動(dòng)調(diào)用這個(gè)方法,需要的朋友可以參考下
    2023-11-11
  • Java 數(shù)組的兩種初始化方式

    Java 數(shù)組的兩種初始化方式

    這篇文章主要介紹了Java 數(shù)組的兩種初始化方式,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-02-02
  • 淺談自定義校驗(yàn)注解ConstraintValidator

    淺談自定義校驗(yàn)注解ConstraintValidator

    鑒于通用性和普遍性,Spring框架提供了validator組件,通過一些校驗(yàn)器,可以對一些數(shù)據(jù)進(jìn)行統(tǒng)一的完整性和有效性等校驗(yàn),即簡單又好用
    2021-06-06
  • java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器

    java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • Spring?Cloud?Hystrix原理與注意事項(xiàng)小結(jié)

    Spring?Cloud?Hystrix原理與注意事項(xiàng)小結(jié)

    本文介紹了Hystrix的基本概念、工作原理以及其在實(shí)際開發(fā)中的應(yīng)用方式,通過對Hystrix的深入學(xué)習(xí),開發(fā)者可以在分布式系統(tǒng)中實(shí)現(xiàn)精細(xì)的錯(cuò)誤處理機(jī)制,并能夠及時(shí)響應(yīng)系統(tǒng)中的異常,避免服務(wù)的連鎖崩潰,感興趣的朋友一起看看吧
    2025-03-03
  • springboot3環(huán)境隔離的實(shí)現(xiàn)

    springboot3環(huán)境隔離的實(shí)現(xiàn)

    在開發(fā)中,環(huán)境很多,本文主要介紹了springboot3環(huán)境隔離的實(shí)現(xiàn),能夠快速切換開發(fā)、測試、生產(chǎn)環(huán)境,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03

最新評論

邹城市| 桃园市| 汤阴县| 邛崃市| 札达县| 黑龙江省| 九江市| 专栏| 兴义市| 鹤峰县| 屯门区| 汤原县| 丽江市| 霍州市| 南安市| 乌鲁木齐县| 砚山县| 遂昌县| 九台市| 双城市| 中阳县| 松原市| 平遥县| 汾西县| 涞源县| 西华县| 四子王旗| 永平县| 荔波县| 聊城市| 衢州市| 台北县| 昭平县| 托克逊县| 固原市| 柳州市| 甘孜| 静宁县| 洪湖市| 平安县| 曲阳县|