diff --git a/spring-shell-core/src/main/java/org/springframework/shell/SpringShellAutoConfiguration.java b/spring-shell-core/src/main/java/org/springframework/shell/SpringShellAutoConfiguration.java index 321e4500..7673fa3a 100644 --- a/spring-shell-core/src/main/java/org/springframework/shell/SpringShellAutoConfiguration.java +++ b/spring-shell-core/src/main/java/org/springframework/shell/SpringShellAutoConfiguration.java @@ -40,6 +40,7 @@ public class SpringShellAutoConfiguration { } @Bean + @ConditionalOnMissingBean(ApplicationRunner.class) public ApplicationRunner applicationRunner(Shell shell) { return new ApplicationRunner() { @Override diff --git a/spring-shell-docs/src/main/asciidoc/using-spring-shell.adoc b/spring-shell-docs/src/main/asciidoc/using-spring-shell.adoc index 04349069..16f5b863 100644 --- a/spring-shell-docs/src/main/asciidoc/using-spring-shell.adoc +++ b/spring-shell-docs/src/main/asciidoc/using-spring-shell.adoc @@ -563,6 +563,7 @@ But it's often good practice to put related commands in the same class, and the can benefit from that. ==== +[[built-in-commands]] === Built-In Commands Any application built using the `{starter-artifactId}` artifact (or, to be more precise, the `spring-shell-standard-commands` dependency) comes with a set of built-in commands. @@ -646,6 +647,72 @@ as comments and ignored, while lines ending with `\` will trigger line continuat [[overriding-or-disabling-built-in-commands]] ==== Overriding or Disabling Built-In Commands +xref:built-in-commands[Built-in commands] are provided with Spring Shell to achieve everyday tasks that many if not +all shell applications need. If you're not happy with the way they behave though, you can disable or override them, as explained in this section. + +[TIP] +.Disabling all Built-in Commands +==== +If you don't need built-in commands at all, then there is an easy way to "disable" them: just don't include them! +Either use a maven exclusion on `spring-shell-standard-commands` or, if you're selectively including Spring Shell dependencies, +don't bring that one in! +[source,xml] +---- + + org.springframework.shell + {starter-artifactId} + {project-version} + + + org.springframework.shell + spring-shell-standard-commands + + + +---- +==== + +===== Disabling Specific Commands +To disable a single built-in command, simply set the `spring.shell.command..enabled` property to `false` in the app +`Environment`. One easy way to do this is to pass extra args to the Boot application in your `main()` entry point: + +[source, java] +---- + public static void main(String[] args) throws Exception { + String[] disabledCommands = {"--spring.shell.command.help.enabled=false"}; // <1> + String[] fullArgs = StringUtils.concatenateStringArrays(args, disabledCommands); + SpringApplication.run(MyApp.class, fullArgs); + } +---- +<1> This disables the integrated `help` command + +===== Overriding Specific Commands +If, instead of disabling a command you'd rather provide your own implementation, then you can either + +* disable the command like explained above and have your implementation registered with the same name +* have your implementing class implement the `.Command` interface. As an example, here is how +to override the `clear` command: ++ +[source, java] +---- +public class MyClear implements Clear.Command { + + @ShellCommand("Clear the screen, only better.") + public void clear() { + // ... + } +} +---- + +[NOTE] +.Please Consider Contributing your Changes +==== +If you feel like your implementation of a standard command could be valuable to the community, +please consider opening a pull-request at http://github.com/spring-projects/spring-shell. + +Alternatively, before making any changes on your own, you can open an issue with the project. Feedback is +always welcome! +==== ==== ResultHandlers