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

SpringBoot使用Maven打包后運行失敗的問題解決詳解

 更新時間:2025年07月16日 08:44:36   作者:超級小忍  
在使用 Spring Boot 開發(fā)項目時,我們通常會使用 Maven 作為構建工具,但有時會出現運行失敗的情況,本文將從多個角度分析常見錯誤場景,并提供詳細的排查和解決方案,希望對大家有所幫助

前言

在使用 Spring Boot 開發(fā)項目時,我們通常會使用 Maven 作為構建工具。Maven 負責依賴管理、編譯、打包等任務。但在實際開發(fā)中,經常遇到一個問題:Spring Boot 項目在本地運行正常,但使用 mvn package 打包成 JAR 后卻無法運行或啟動失敗。

本文將從多個角度分析常見錯誤場景,并提供詳細的排查和解決方案,幫助你徹底解決 Spring Boot Maven 打包后運行失敗的問題。

一、問題背景

Spring Boot 應用默認使用 spring-boot-maven-plugin 插件進行打包,生成一個包含所有依賴的可執(zhí)行 JAR 文件(俗稱“fat jar”)。然而,在某些情況下,構建后的 JAR 文件可能缺少主類、依賴未正確打包、配置文件缺失等問題,導致運行時報錯。

二、常見錯誤類型及解決方案

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

現象

no main manifest attribute, in your-app.jar

原因

JAR 包中的 MANIFEST.MF 文件沒有指定主類(Main-Class),Java 無法識別程序入口點。

解決方案

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

<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,則可以直接啟用插件而無需額外配置:

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

驗證方法

查看 JAR 包中的 MANIFEST 是否包含主類信息:

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

2. 類找不到(ClassNotFoundException / NoClassDefFoundError)

現象

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

原因

  • 依賴未被正確打包進最終的 JAR 文件
  • 某些依賴的作用域設置為 providedtest
  • 沒有使用 spring-boot-maven-plugin 插件

解決方案

確保依賴作用域正確:

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

使用 spring-boot-maven-plugin 進行 repackage:

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

查看 JAR 包中是否包含目標類:

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

3. 配置文件未被打包或路徑不對

現象

應用啟動時報錯:

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

原因

  • 配置文件未放在標準目錄 src/main/resources
  • Maven 打包時未啟用資源過濾(filtering)

解決方案

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

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

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

4. 多模塊項目打包問題

現象

子模塊依賴未正確打包,導致類找不到或主程序找不到。

原因

  • 子模塊未安裝到本地倉庫
  • 主模塊未正確聲明依賴關系

解決方案

在父項目的 pom.xml 中定義模塊順序:

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

在主模塊中添加對子模塊的依賴:

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

構建前先執(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 版本不一致導致的錯誤

現象

java.lang.UnsupportedClassVersionError: major.minor version 61.0

原因

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

解決方案

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

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

6. 打包命令使用錯誤

現象

構建的 JAR 文件缺失內容或不可執(zhí)行

正確做法

使用以下命令進行打包:

mvn clean package

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

三、推薦的排查步驟

步驟操作說明
1查看日志定位具體錯誤堆棧
2檢查 JAR 內容jar tf your-app.jar
3檢查主類信息unzip -p your-app.jar META-INF/MANIFEST.MF
4驗證依賴完整性查看 BOOT-INF/lib/ 目錄是否存在
5本地測試運行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>

五、總結

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

六、結語

Spring Boot + Maven 是現代 Java Web 開發(fā)的標準組合,但打包過程中的細節(jié)容易出錯。通過理解構建流程、掌握關鍵插件的使用以及學會如何檢查 JAR 包內容,你可以快速定位并修復大多數打包運行失敗的問題。

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

相關文章

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

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

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

    SpringBoot中ApplicationEvent和ApplicationListener用法小結

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

    解析springboot整合谷歌開源緩存框架Guava Cache原理

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

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

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

    Java 實戰(zhàn)項目之在線點餐系統的實現流程

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

    java的equals和==的比較示例

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

    SpringSecurityOAuth2實現微信授權登錄

    微信的登錄功能是用戶注冊和使用微信的必經之路之一,而微信授權登錄更是方便了用戶的登錄操作,本文主要介紹了SpringSecurityOAuth2實現微信授權登錄,感興趣的可以了解一下
    2023-09-09
  • mybatis-plus實體類主鍵策略有3種(小結)

    mybatis-plus實體類主鍵策略有3種(小結)

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

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

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

    Java線程的全方位詳解

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

最新評論

三台县| 沈阳市| 福建省| 兴和县| 北辰区| 略阳县| 铜山县| 福贡县| 承德县| 沁阳市| 松潘县| 河源市| 尖扎县| 东光县| 曲阳县| 建阳市| 襄汾县| 淳安县| 沂源县| 长丰县| 凌海市| 泽库县| 霍山县| 剑河县| 来安县| 延边| 崇阳县| 南昌县| 乌兰察布市| 邵阳县| 木兰县| 祁连县| 松原市| 交城县| 鄂伦春自治旗| 沂南县| 介休市| 射阳县| 德安县| 北票市| 青龙|