You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot项目Maven打包排除依赖配置与主类找不到问题

解决Spring Boot Maven瘦包打包后找不到主函数问题

问题根源

你现在只配置了maven-dependency-plugin把依赖复制到lib目录,但没给生成的JAR指定主类入口,而且Spring Boot默认的spring-boot-maven-plugin会自动生成包含所有依赖的可执行JAR,直接覆盖了你要的“瘦JAR”,导致执行java -jar时找不到主函数。

完整配置方案

1. 保留现有依赖复制配置

你的maven-dependency-plugin配置没问题,继续保留,确保打包时把依赖都复制到target/lib:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
        </execution>
    </executions>
</plugin>

2. 配置maven-jar-plugin生成带主类的瘦JAR

添加这个插件,专门生成只包含项目自身代码的JAR,同时在JAR的MANIFEST.MF里写上主类和依赖路径:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.3.0</version>
    <configuration>
        <archive>
            <manifest>
                <!-- 替换成你自己的Spring Boot主类全路径,比如com.example.DemoApplication -->
                <mainClass>com.example.YourSpringBootApplication</mainClass>
                <!-- 自动把lib目录下的所有依赖加到类路径 -->
                <addClasspath>true</addClasspath>
                <classpathPrefix>lib/</classpathPrefix>
            </manifest>
        </archive>
        <!-- 排除所有依赖,只打包自己的代码 -->
        <excludes>
            <exclude>**/*.jar</exclude>
        </excludes>
    </configuration>
</plugin>

3. 禁用spring-boot-maven-plugin的自动重打包

如果你的pom里有spring-boot-maven-plugin,它默认会在打包阶段生成带全依赖的JAR,覆盖我们的瘦JAR。必须禁用它的repackage功能:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <version>3.2.0</version>
    <executions>
        <execution>
            <id>repackage</id>
            <goals>
                <goal>repackage</goal>
            </goals>
            <!-- 跳过自动重打包 -->
            <configuration>
                <skip>true</skip>
            </configuration>
        </execution>
    </executions>
    <!-- 保留主类配置,保证Spring Boot注解正常编译 -->
    <configuration>
        <mainClass>com.example.YourSpringBootApplication</mainClass>
    </configuration>
</plugin>

正确启动方式

打包完成后,target目录下会有你的项目JAR(比如demo-1.0.0.jar)和lib文件夹,用以下命令启动:

方式1:直接用jar启动(推荐)

因为我们已经在MANIFEST.MF里配置了类路径,直接执行:

java -jar target/demo-1.0.0.jar

方式2:用-djava.ext.dirs指定依赖目录

如果必须用这个参数,注意要同时包含系统默认的扩展目录和你的lib目录(Windows用;分隔,Linux/macOS用:):

# Linux/macOS
java -Djava.ext.dirs=$JAVA_HOME/jre/lib/ext:target/lib -jar target/demo-1.0.0.jar

# Windows
java -Djava.ext.dirs=%JAVA_HOME%\jre\lib\ext;target\lib -jar target/demo-1.0.0.jar

检查要点

  • 一定要把配置里的com.example.YourSpringBootApplication换成你实际的主类全路径。
  • 打包后打开JAR里的META-INF/MANIFEST.MF,确认Main-Class和Class-Path这两个属性是否正确。

内容的提问来源于stack exchange,提问作者Kevin Peng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 11:09:16