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

如何运行Spring Boot Jar中的指定主类(Gradle构建)

如何运行Spring Boot Jar包中的指定Main类

嗨,我来帮你搞定这个问题!Spring Boot打包生成的Jar包结构和普通Jar不一样——编译后的类放在BOOT-INF/classes,依赖Jar放在BOOT-INF/lib,普通的java -cp命令没法直接识别这些路径,所以得用Spring Boot专属的方式来指定运行类,下面给你三种实用方案:

方案一:直接用java -jar命令指定Main类

这是最简单的方式,利用Spring Boot自带的启动参数,直接指定要运行的类:

java -jar your-spring-boot-app.jar --spring.main.main-class=com.yourpackage.YourTargetMainClass

这个命令会让Spring Boot的启动器自动处理BOOT-INF下的类路径,帮你找到指定的Main类并运行。

方案二:用java -cp结合Spring Boot启动器

如果你习惯用-cp参数,需要借助Spring Boot的PropertiesLauncher来加载类,它能识别Spring Boot Jar的特殊结构:

java -cp "your-spring-boot-app.jar" org.springframework.boot.loader.PropertiesLauncher --loader.main=com.yourpackage.YourTargetMainClass

方案三:通过Gradle脚本直接指定(适合开发阶段)

既然你用Gradle构建项目,可以直接在构建脚本里配置bootRun任务,指定要运行的Main类:

Groovy DSL(build.gradle)

bootRun {
    mainClass.set('com.yourpackage.YourTargetMainClass')
}

Kotlin DSL(build.gradle.kts)

tasks.bootRun {
    mainClass.set("com.yourpackage.YourTargetMainClass")
}

配置完成后,直接运行Gradle命令就能启动指定类:

./gradlew bootRun

补充说明

为什么普通的java -cp "sample.jar" com.sample.ClassName不行?因为Spring Boot Jar的类文件不在Jar的根目录,而是嵌套在BOOT-INF/classes下,普通的类加载器不会遍历这个目录;而Spring Boot的启动器(比如JarLauncher、PropertiesLauncher)专门处理了这种嵌套结构的类路径加载逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:03