如何运行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
相关产品推荐
相关产品推荐

