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

如何从Spring Boot应用jar包中运行非Spring Boot类型的主应用程序

问题根因

你当前执行的java -jar <jarName> <com.dummy.folder3.Mainpgm1> -u <username> -p <password>命令逻辑存在错误:Spring Boot 打包生成的可执行 Jar 包默认启动入口是com.dummy.Application,你跟在 Jar 包名后的所有内容都会被识别为Application主方法的入参,根本不会触发自定义Mainpgm1的主方法执行,因此会抛出参数不合法的错误。

可行解决方案

方案1:指定类路径启动自定义主类(适配非Spring工具场景,最便捷)

不要使用-jar参数启动,改用-cp(类路径)参数显式指定启动类,命令如下:

java -cp <jarName> com.dummy.folder3.Mainpgm1 -u <username> -p <password>

注意事项:

  • 如果你打的是包含所有依赖的 Fat Jar,直接执行上述命令即可
  • 如果是不含依赖的瘦 Jar,需要把所有依赖的 Jar 路径都添加到-cp参数中,多个路径用系统分隔符(Windows 为分号;,Linux/macOS 为冒号:)分隔

方案2:改造为Spring Boot CommandLineRunner(适配需要调用Spring托管Bean的场景)

如果你的工具需要调用 Spring 上下文内的托管 Bean,直接通过普通主方法调用会出现依赖注入空指针问题,可以按如下逻辑改造:

  1. 给Mainpgm1添加@Component注解,实现CommandLineRunner接口
  2. 在重写的run方法内增加参数判断,存在工具执行标识参数时运行你的工具逻辑,否则走原 Spring Boot 应用的启动流程
  3. 执行命令改为:java -jar <jarName> -u <username> -p <password> --run.tool=enable

方案3:打包时指定主类为Mainpgm1(适配单独打工具包的场景)

如果你需要单独打包这个一次性工具,可以修改项目构建配置(pom.xml/build.gradle)里的 Spring Boot 打包参数,将主类指定为com.dummy.folder3.Mainpgm1,打包后即可直接用java -jar <jarName> -u <username> -p <password>执行。

额外排查点

如果执行方案1后仍有报错,优先排查以下内容:

  • 检查Mainpgm1的主方法参数解析逻辑是否正确,是否能正常识别-u、-p参数
  • 检查调用 Spring 应用内的类时,是否依赖了 Spring 托管的 Bean,如果是则需要改用方案2,或者在主方法内手动初始化 Spring 上下文

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:45:04