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

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

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

前言

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

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

一、問題背景

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

二、常見錯(cuò)誤類型及解決方案

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

現(xiàn)象

no main manifest attribute, in your-app.jar

原因

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

解決方案

確保在 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>

驗(yàn)證方法

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

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

2. 類找不到(ClassNotFoundException / NoClassDefFoundError)

現(xiàn)象

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

原因

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

解決方案

確保依賴作用域正確:

<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)類:

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í)未啟用資源過濾(filtering)

解決方案

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

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

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

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

現(xiàn)象

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

原因

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

解決方案

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

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

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

<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)用。

三、推薦的排查步驟

步驟操作說明
1查看日志定位具體錯(cuò)誤堆棧
2檢查 JAR 內(nèi)容jar tf your-app.jar
3檢查主類信息unzip -p your-app.jar META-INF/MANIFEST.MF
4驗(yàn)證依賴完整性查看 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é)

問題類型常見表現(xiàn)解決方案
缺少主類no main manifest attribute配置 <mainClass>
類找不到ClassNotFoundException檢查依賴 + repackage
配置文件缺失找不到 application.properties放入 resources + filtering
多模塊問題類找不到先 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 開發(fā)的標(biāo)準(zhǔn)組合,但打包過程中的細(xì)節(jié)容易出錯(cuò)。通過理解構(gòu)建流程、掌握關(guān)鍵插件的使用以及學(xué)會(huì)如何檢查 JAR 包內(nèi)容,你可以快速定位并修復(fù)大多數(shù)打包運(yùn)行失敗的問題。

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

相關(guān)文章

  • java中讀寫Properties屬性文件公用方法詳解

    java中讀寫Properties屬性文件公用方法詳解

    在項(xiàng)目開發(fā)中我們會(huì)將很多環(huán)境特定的變量定義到一個(gè)配置文件中,比如properties文件,把數(shù)據(jù)庫(kù)的用戶名和密碼存放到此屬性文件中。下面這篇文章就主要介紹了java中讀寫Properties屬性文件公用方法,需要的朋友可以參考借鑒。
    2017-01-01
  • Mybatis-plus?sql注入及防止sql注入詳解

    Mybatis-plus?sql注入及防止sql注入詳解

    mybatis-plus提供了許多默認(rèn)單表 CRUD 語(yǔ)句,對(duì)于其他SQL情況愛莫能助,下面這篇文章主要給大家介紹了關(guān)于Mybatis-plus?sql注入及防止sql注入的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • java實(shí)現(xiàn)線性表及其算法

    java實(shí)現(xiàn)線性表及其算法

    線性表是最簡(jiǎn)單和最常用的一種數(shù)據(jù)結(jié)構(gòu),它是有n個(gè)體數(shù)據(jù)元素(節(jié)點(diǎn))組成的有限序列,這篇文章主要介紹了java實(shí)現(xiàn)線性表及其算法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • mybatis xml注釋sql的注意事項(xiàng)及說明

    mybatis xml注釋sql的注意事項(xiàng)及說明

    這篇文章主要介紹了mybatis xml注釋sql的注意事項(xiàng)及說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java FTPClient連接池的實(shí)現(xiàn)

    Java FTPClient連接池的實(shí)現(xiàn)

    這篇文章主要介紹了Java FTPClient連接池的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • RestTemplate發(fā)送請(qǐng)求時(shí)Cookie的影響及注意事項(xiàng)說明

    RestTemplate發(fā)送請(qǐng)求時(shí)Cookie的影響及注意事項(xiàng)說明

    這篇文章主要介紹了RestTemplate發(fā)送請(qǐng)求時(shí)Cookie的影響及注意事項(xiàng)說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2023-07-07
  • 在Android的應(yīng)用中實(shí)現(xiàn)網(wǎng)絡(luò)圖片異步加載的方法

    在Android的應(yīng)用中實(shí)現(xiàn)網(wǎng)絡(luò)圖片異步加載的方法

    這篇文章主要介紹了在Android的應(yīng)用中實(shí)現(xiàn)網(wǎng)絡(luò)圖片異步加載的方法,一定程度上有助于提高安卓程序的使用體驗(yàn),需要的朋友可以參考下
    2015-07-07
  • IDEA去除掉代碼中虛線、波浪線和下劃線實(shí)線的方法

    IDEA去除掉代碼中虛線、波浪線和下劃線實(shí)線的方法

    初次安裝使用IDEA,總是能看到導(dǎo)入代碼后,出現(xiàn)很多的波浪線,下劃線和虛線,這是IDEA給我們的一些提示和警告,但是有時(shí)候我們并不需要,反而會(huì)讓人看著很不爽,這里簡(jiǎn)單記錄一下自己的調(diào)整方法,供其他的小伙伴在使用的時(shí)候參考
    2024-09-09
  • 基于Java回顧之網(wǎng)絡(luò)通信的應(yīng)用分析

    基于Java回顧之網(wǎng)絡(luò)通信的應(yīng)用分析

    在這篇文章里,我們主要討論如何使用Java實(shí)現(xiàn)網(wǎng)絡(luò)通信,包括TCP通信、UDP通信、多播以及NIO
    2013-05-05
  • 一文詳解Java的餓漢和懶漢設(shè)計(jì)模式

    一文詳解Java的餓漢和懶漢設(shè)計(jì)模式

    這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式中的的餓漢模式和懶漢模式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下
    2022-12-12

最新評(píng)論