编写

当需要将某些内容写入控制台时,您可以始终使用 JDK 的 System.out,它会直接写入 JDK 自身的流。另一种推荐的方式是使用 JLine 的 Terminal 并从中获取writer实例。

如果使用目标端点,即消费者,并且不期望返回任何内容,因为 CommandContext 包含对 Terminal 的引用,并且可以从那里访问 writer。

CommandRegistration.builder()
	.command("example")
	.withTarget()
		.consumer(ctx -> {
			ctx.getTerminal().writer().println("hi");
			ctx.getTerminal().writer().flush();
		})
		.and()
	.build();

如果使用 @Command,则可以访问 CommandContext 并从中获取 Terminal

@Command
public void example(CommandContext ctx) {
	ctx.getTerminal().writer().println("hi");
	ctx.getTerminal().writer().flush();
}

可以自动装配 Terminal 以访问其 writer。

@Autowired
Terminal terminal;

@ShellMethod
public void example() {
	terminal.writer().println("hi");
	terminal.writer().flush();
}