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

如何让Spring-Shell不解析命令行参数为Shell命令并保持交互模式?

解决方案

问题1:区分启动选项与Shell命令

Spring Shell默认会将所有传入的命令行参数当作Shell命令解析,导致--flag被误识别。有两种常用解决方式:

  • 命令行分隔符方式:用--作为Spring Boot启动参数和Shell命令的分隔符,让--flag被Spring Boot处理,--之后的内容才交给Spring Shell:
    java -jar my.jar --flag -- com.mycompany.App
    
  • 代码过滤方式:自定义ApplicationRunner提前过滤启动参数,将非Shell命令的参数移除后再交给Spring Shell:
    @Component
    public class StartupArgsFilter implements ApplicationRunner {
    
        @Override
        public void run(ApplicationArguments args) throws Exception {
            List<String> shellArgs = Arrays.stream(args.getSourceArgs())
                    .filter(arg -> !arg.startsWith("--"))
                    .collect(Collectors.toList());
            
            System.setProperty("spring.shell.args", String.join(" ", shellArgs));
        }
    }
    

问题2:强制保持交互模式

Spring Shell默认在传入命令行参数时启用NonInteractiveShellRunner,要强制维持交互模式,可通过以下两种方式实现:

  • 配置文件禁用:在application.properties中添加配置,直接关闭非交互Runner:
    spring.shell.runner.non-interactive.enabled=false
    
  • 代码自定义优先级:创建配置类,调整Runner的启用状态与执行优先级:
    @Configuration
    public class ShellConfig {
    
        @Bean
        public InteractiveShellRunner interactiveShellRunner(Shell shell, ShellContext shellContext) {
            InteractiveShellRunner runner = new InteractiveShellRunner(shell, shellContext);
            runner.setOrder(Ordered.HIGHEST_PRECEDENCE);
            return runner;
        }
    
        @Bean
        public NonInteractiveShellRunner nonInteractiveShellRunner(Shell shell, ShellContext shellContext) {
            NonInteractiveShellRunner runner = new NonInteractiveShellRunner(shell, shellContext);
            runner.setEnabled(false);
            return runner;
        }
    }
    

也可以直接通过命令行参数临时指定:

java -jar my.jar --spring.shell.runner.non-interactive.enabled=false --flag

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:22:36