рдХрд┐рд╕реА рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп @SpringBootTest рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдирд╛

рдХрднреА-рдХрднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕реАрдзреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрд╕реЛрд▓ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдорд╛рдзрд╛рди рд╕реНрдкреНрд░рд┐рдВрдЧ рд╢реЗрд▓ рд╣реИред


рдЯреЗрд╕реНрдЯ рднреА рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЕрднреНрдпрд╛рд╕ рд╣реИ (рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реИ) рдФрд░, рдХрднреА-рдХрднреА, рд╡реЗ @SpringBootTest рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рд╕реНрдкреНрд░рд┐рдВрдЧ рд╢реЗрд▓ рдореЗрдВ рдкреНрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ ... рдЖрдкрдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХреЗрд╡рд▓ рдХрдВрд╕реЛрд▓ рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рдлреНрд░реАрдЬ рд╣реЛрдЧрд╛ред


рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рдЧреВрдЧрд▓


GitHub рдкрд░ рдПрдХ рдЫреЛрдЯреА рдЦреЛрдЬ рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдкрд╛рддреЗ рд╣реИрдВ ред


рд╢реЗрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЗрдЦрдХ рдмрд┐рди рдХреЛ рдПрдкреНрд▓реАрдХреЗрд╢рдирд░реВрдирд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдХрдВрд╕реЛрд▓ рд╕реЗ рдПрдХ рдХрдорд╛рдВрдб рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ @ShellComponent рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЖрджреЗрд╢реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдФрд░ рдЙрдирдХреЗ рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рдорд╛рдзрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


@Component
public class CliAppRunner implements ApplicationRunner {
	public CliAppRunner() {

	}

	@Override
	public void run(ApplicationArguments args) throws Exception {
		//do nothing
	}
	

}

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes =CliConfig.class)
public class ShellCommandIntegrationTest {

	@Autowired
	private Shell shell;
	
	@Test
	public void runTest(){
		
		
		Object result=shell.evaluate(new Input(){
			@Override
			public String rawText() {
				return "add 1 3";
			}
			
		});

		DefaultResultHandler  resulthandler=new DefaultResultHandler();
		resulthandler.handleResult(result);
		
		
	}
	
	
}

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдЕрднреА рднреА рдЯреАрдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдпрд╣ рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИ!


рд╣рд▓реНрдХреЗ рдбрд┐рдмрдЧ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧрдкреЗрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рд╕ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдорд┐рд▓рддреЗ рд╣реИрдВ:


	private void callRunners(ApplicationContext context, ApplicationArguments args) {
		List<Object> runners = new ArrayList<>();
		runners.addAll(context.getBeansOfType(ApplicationRunner.class).values());
		runners.addAll(context.getBeansOfType(CommandLineRunner.class).values());
		AnnotationAwareOrderComparator.sort(runners);
		for (Object runner : new LinkedHashSet<>(runners)) {
			if (runner instanceof ApplicationRunner) {
				callRunner((ApplicationRunner) runner, args);
			}
			if (runner instanceof CommandLineRunner) {
				callRunner((CommandLineRunner) runner, args);
			}
		}
	}

рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдмрд╕ рдкрд╣рд▓реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╕реНрдЯрдо ApplicationRunner рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдмрд┐рди рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╛рдзрд╛рди рд╕рд░рд▓ рд╣реИ - рдмрд┐рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ! рд╕реНрдкреНрд░рд┐рдВрдЧ рд╢реИрд▓ рд╕реНрд░реЛрдд рдореЗрдВ рдЖрдиреЗ рдХрд╛ рд╕рдордпред


рд░рд┐рдбрд┐рдлрд╛рдЗрди рдмреАрди


рдпрд╣ рдЬрд▓реНрджреА рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ JLineShellAutoConfiguration рдХреНрд▓рд╛рд╕ рд░рдирд░реНрд╕ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╣рдо scriptApplicationRunner рдмреАрди рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдг рдХреЛ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред


, ( spring.main.allow-bean-definition-overriding=true Spring 2.+):


	
       @TestConfiguration
	static class Runner {
		@Bean
		public ApplicationRunner scriptApplicationRunner(){
			return new CliAppRunner();
		}
	}

, . JLineShellAutoConfiguration Runner scriptApplicationRunner. ( тАФ - тАФ , ?).



, , JLineShellAutoConfiguration:


	@Bean
	@ConditionalOnProperty(prefix = SPRING_SHELL_SCRIPT, value = ScriptShellApplicationRunner.ENABLED, havingValue = "true", matchIfMissing = true)
	public ApplicationRunner scriptApplicationRunner(Parser parser, ConfigurableEnvironment environment) {
		return new ScriptShellApplicationRunner(parser, shell, environment);
	}

, тАФ property, . application.properties:


spring.shell.script.enabled=false 

. . .



ScriptShellApplicationRunner , property. :


	public static final String SPRING_SHELL_SCRIPT = "spring.shell.script";
	public static final String ENABLED = "spring.shell.script";

	/**
	 * The name of the environment property that allows to disable the behavior of this
	 * runner.
	 */
	public static final String SPRING_SHELL_SCRIPT_ENABLED = SPRING_SHELL_SCRIPT + "." + ENABLED;

рд╡рд╛рд╣, рдЕрдм рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд▓рдЧ рд░рд╣рд╛ рд╣реИ - рд╡рд╛рдкрд╕ application.properties рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд▓рд┐рдЦреЗрдВ:


spring.shell.script.spring.shell.script=false 

рдЕрдкрдиреА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░ рдХрд░реЗрдВред рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВред рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


рдорд╛рдорд▓рд╛ рд╣рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред


All Articles