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

SpringBoot使用Maven打包后運(yùn)行失敗的問(wèn)題解決詳解

 更新時(shí)間:2025年07月16日 08:44:36   作者:超級(jí)小忍  
在使用 Spring Boot 開(kāi)發(fā)項(xiàng)目時(shí),我們通常會(huì)使用 Maven 作為構(gòu)建工具,但有時(shí)會(huì)出現(xiàn)運(yùn)行失敗的情況,本文將從多個(gè)角度分析常見(jiàn)錯(cuò)誤場(chǎng)景,并提供詳細(xì)的排查和解決方案,希望對(duì)大家有所幫助

前言

在使用 Spring Boot 開(kāi)發(fā)項(xiàng)目時(shí),我們通常會(huì)使用 Maven 作為構(gòu)建工具。Maven 負(fù)責(zé)依賴(lài)管理、編譯、打包等任務(wù)。但在實(shí)際開(kāi)發(fā)中,經(jīng)常遇到一個(gè)問(wèn)題:Spring Boot 項(xiàng)目在本地運(yùn)行正常,但使用 mvn package 打包成 JAR 后卻無(wú)法運(yùn)行或啟動(dòng)失敗。

本文將從多個(gè)角度分析常見(jiàn)錯(cuò)誤場(chǎng)景,并提供詳細(xì)的排查和解決方案,幫助你徹底解決 Spring Boot Maven 打包后運(yùn)行失敗的問(wèn)題。

一、問(wèn)題背景

Spring Boot 應(yīng)用默認(rèn)使用 spring-boot-maven-plugin 插件進(jìn)行打包,生成一個(gè)包含所有依賴(lài)的可執(zhí)行 JAR 文件(俗稱(chēng)“fat jar”)。然而,在某些情況下,構(gòu)建后的 JAR 文件可能缺少主類(lèi)、依賴(lài)未正確打包、配置文件缺失等問(wèn)題,導(dǎo)致運(yùn)行時(shí)報(bào)錯(cuò)。

二、常見(jiàn)錯(cuò)誤類(lèi)型及解決方案

1. 缺少主類(lèi)信息(no main manifest attribute)

現(xiàn)象

no main manifest attribute, in your-app.jar

原因

JAR 包中的 MANIFEST.MF 文件沒(méi)有指定主類(lèi)(Main-Class),Java 無(wú)法識(shí)別程序入口點(diǎn)。

解決方案

確保在 pom.xml 中正確配置了 spring-boot-maven-plugin 插件,并顯式指定主類(lèi):

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <mainClass>com.example.demo.DemoApplication</mainClass>
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>repackage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

或者,如果你使用的是 Spring Boot 的 parent POM,則可以直接啟用插件而無(wú)需額外配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

驗(yàn)證方法

查看 JAR 包中的 MANIFEST 是否包含主類(lèi)信息:

unzip -p your-app.jar META-INF/MANIFEST.MF

2. 類(lèi)找不到(ClassNotFoundException / NoClassDefFoundError)

現(xiàn)象

java.lang.ClassNotFoundException: com.example.service.SomeService

原因

  • 依賴(lài)未被正確打包進(jìn)最終的 JAR 文件
  • 某些依賴(lài)的作用域設(shè)置為 providedtest
  • 沒(méi)有使用 spring-boot-maven-plugin 插件

解決方案

確保依賴(lài)作用域正確:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 不要使用 provided -->
</dependency>

使用 spring-boot-maven-plugin 進(jìn)行 repackage:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

查看 JAR 包中是否包含目標(biāo)類(lèi):

jar tf your-app.jar | grep SomeService.class

3. 配置文件未被打包或路徑不對(duì)

現(xiàn)象

應(yīng)用啟動(dòng)時(shí)報(bào)錯(cuò):

Could not load property source from location 'classpath:/application.properties'

原因

  • 配置文件未放在標(biāo)準(zhǔn)目錄 src/main/resources
  • Maven 打包時(shí)未啟用資源過(guò)濾(filtering)

解決方案

  • 將配置文件放在 src/main/resources 目錄下
  • 如果需要替換占位符(如 ${my.property}),請(qǐng)啟用資源過(guò)濾:
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

查看 JAR 包中是否包含配置文件:

jar tf your-app.jar | grep application.properties

4. 多模塊項(xiàng)目打包問(wèn)題

現(xiàn)象

子模塊依賴(lài)未正確打包,導(dǎo)致類(lèi)找不到或主程序找不到。

原因

  • 子模塊未安裝到本地倉(cāng)庫(kù)
  • 主模塊未正確聲明依賴(lài)關(guān)系

解決方案

在父項(xiàng)目的 pom.xml 中定義模塊順序:

<modules>
    <module>common</module>
    <module>web</module>
</modules>

在主模塊中添加對(duì)子模塊的依賴(lài):

<dependency>
    <groupId>com.example</groupId>
    <artifactId>common</artifactId>
    <version>1.0.0</version>
</dependency>

構(gòu)建前先執(zhí)行:

mvn clean install

主模塊中使用 spring-boot-maven-plugin 插件重新打包:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

5. JDK 版本不一致導(dǎo)致的錯(cuò)誤

現(xiàn)象

java.lang.UnsupportedClassVersionError: major.minor version 61.0

原因

編譯環(huán)境與運(yùn)行環(huán)境使用的 Java 版本不一致。

解決方案

統(tǒng)一編譯與運(yùn)行環(huán)境的 JDK 版本,在 pom.xml 中指定編譯版本:

<properties>
    <maven.compiler.source>17</maven.compiler.source>
    <maven.compiler.target>17</maven.compiler.target>
</properties>

6. 打包命令使用錯(cuò)誤

現(xiàn)象

構(gòu)建的 JAR 文件缺失內(nèi)容或不可執(zhí)行

正確做法

使用以下命令進(jìn)行打包:

mvn clean package

確保 target/your-app.jar 是一個(gè)完整的、可執(zhí)行的 Spring Boot 應(yīng)用。

三、推薦的排查步驟

步驟操作說(shuō)明
1查看日志定位具體錯(cuò)誤堆棧
2檢查 JAR 內(nèi)容jar tf your-app.jar
3檢查主類(lèi)信息unzip -p your-app.jar META-INF/MANIFEST.MF
4驗(yàn)證依賴(lài)完整性查看 BOOT-INF/lib/ 目錄是否存在
5本地測(cè)試運(yùn)行java -jar your-app.jar

四、完整示例:pom.xml 配置模板

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>1.0.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.1</version>
        <relativePath/>
    </parent>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.example.demo.DemoApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

五、總結(jié)

問(wèn)題類(lèi)型常見(jiàn)表現(xiàn)解決方案
缺少主類(lèi)no main manifest attribute配置 <mainClass>
類(lèi)找不到ClassNotFoundException檢查依賴(lài) + repackage
配置文件缺失找不到 application.properties放入 resources + filtering
多模塊問(wèn)題類(lèi)找不到先 install 子模塊
JDK 版本不一致UnsupportedClassVersionError統(tǒng)一 source/target JDK
插件配置錯(cuò)誤構(gòu)建失敗或不可執(zhí)行正確使用 spring-boot-maven-plugin

六、結(jié)語(yǔ)

Spring Boot + Maven 是現(xiàn)代 Java Web 開(kāi)發(fā)的標(biāo)準(zhǔn)組合,但打包過(guò)程中的細(xì)節(jié)容易出錯(cuò)。通過(guò)理解構(gòu)建流程、掌握關(guān)鍵插件的使用以及學(xué)會(huì)如何檢查 JAR 包內(nèi)容,你可以快速定位并修復(fù)大多數(shù)打包運(yùn)行失敗的問(wèn)題。

到此這篇關(guān)于SpringBoot使用Maven打包后運(yùn)行失敗的問(wèn)題解決詳解的文章就介紹到這了,更多相關(guān)SpringBoot Maven打包后運(yùn)行失敗解決內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springcloud本地配置優(yōu)先方式

    springcloud本地配置優(yōu)先方式

    這篇文章主要介紹了springcloud本地配置優(yōu)先方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringBoot中ApplicationEvent和ApplicationListener用法小結(jié)

    SpringBoot中ApplicationEvent和ApplicationListener用法小結(jié)

    這篇文章介紹SpringBoot中ApplicationEvent用法,注意ApplicationEvent和MQ隊(duì)列雖然實(shí)現(xiàn)的功能相似,但是MQ還是有其不可替代性的,最本質(zhì)的區(qū)別就是MQ可以用于不同系統(tǒng)之間的消息發(fā)布,而SpringEvent這種模式只能在一個(gè)系統(tǒng)中,需要的朋友可以參考下
    2023-03-03
  • 解析springboot整合谷歌開(kāi)源緩存框架Guava Cache原理

    解析springboot整合谷歌開(kāi)源緩存框架Guava Cache原理

    本文主要為大家解析了springboot整合谷歌開(kāi)源緩存框架Guava Cache的原理以及在實(shí)際開(kāi)發(fā)過(guò)程中的使用,附含源碼,有需要的朋友可以參考下
    2021-08-08
  • Spring?Boot常用注解(經(jīng)典干貨)

    Spring?Boot常用注解(經(jīng)典干貨)

    Spring?Boot是一個(gè)快速開(kāi)發(fā)框架,快速的將一些常用的第三方依賴(lài)整合,全部采用注解形式,內(nèi)置Http服務(wù)器,最終以Java應(yīng)用程序進(jìn)行執(zhí)行,這篇文章主要介紹了Spring?Boot常用注解(絕對(duì)經(jīng)典),需要的朋友可以參考下
    2023-01-01
  • Java 實(shí)戰(zhàn)項(xiàng)目之在線(xiàn)點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目之在線(xiàn)點(diǎn)餐系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實(shí)現(xiàn)一個(gè)在線(xiàn)點(diǎn)餐系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • java的equals和==的比較示例

    java的equals和==的比較示例

    這篇文章主要介紹了java的equals和==的比較示例,需要的朋友可以參考下
    2014-04-04
  • SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄

    SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄

    微信的登錄功能是用戶(hù)注冊(cè)和使用微信的必經(jīng)之路之一,而微信授權(quán)登錄更是方便了用戶(hù)的登錄操作,本文主要介紹了SpringSecurityOAuth2實(shí)現(xiàn)微信授權(quán)登錄,感興趣的可以了解一下
    2023-09-09
  • mybatis-plus實(shí)體類(lèi)主鍵策略有3種(小結(jié))

    mybatis-plus實(shí)體類(lèi)主鍵策略有3種(小結(jié))

    這篇文章主要介紹了mybatis-plus實(shí)體類(lèi)主鍵策略有3種(小結(jié)),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別

    關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別

    這篇文章主要介紹了關(guān)于@GetMapping和@GetMapping(value=““)的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java線(xiàn)程的全方位詳解

    Java線(xiàn)程的全方位詳解

    Java 給多線(xiàn)程編程提供了內(nèi)置的支持。 一條線(xiàn)程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線(xiàn)程,每條線(xiàn)程并行執(zhí)行不同的任務(wù),多線(xiàn)程是多任務(wù)的一種特別的形式,但多線(xiàn)程使用了更小的資源開(kāi)銷(xiāo)
    2021-10-10

最新評(píng)論

吉林省| 永寿县| 曲松县| 上饶市| 湘潭县| 晋江市| 习水县| 博乐市| 齐河县| 霍州市| 无棣县| 普兰县| 新邵县| 于都县| 安宁市| 同德县| 兴山县| 富平县| 砚山县| 天门市| 神木县| 湘潭县| 社旗县| 南乐县| 临海市| 白朗县| 寿宁县| 武乡县| 金塔县| 留坝县| 竹溪县| 富阳市| 湟中县| 兴和县| 无锡市| 来凤县| 门源| 梅州市| 长汀县| 丹棱县| 双柏县|