执行逻辑

走着路睡觉大约 4 分钟

执行逻辑

执行运行配置分为以下几步:

  • 用户选择一个运行配置 ,然后点击运行(工具栏按钮或菜单栏“Run->run”)

ProgramRunner.execute(ExecutionEnvironment environment) 方法的执行过程,主要包括以下几步:

  • 调用 RunProfile.getState() 方法获取 RunProfileStateopen in new window 对象,它包含了命令行参数,环境参数,和另外一些必要的参数

  • 调用上一步获取到的 RunProfileState 对象的 execute() 方法,它在开始运行程序时,会在输入输出流上会绑定一个ProcessHandler 对象,并创建一个控制台(console)来显示输出内容,返回ExecutionResultopen in new window 对象,ExecutionResultopen in new window 对象包含了控制台(console)和程序执行器

  • 创建在 RunDebug 窗口中显示执行控制面板的 RunContentBuilder 对象

执行器

Executoropen in new window 接口定义了 运行配置 的执行方式。

IntelliJ Platform 提供了3个默认的执行器,Run , Debug , 和 Run with Coverage 。每一个执行器都有对应的工具栏按钮,点击对应的工具栏按钮会执行对应的操作。

开发执行器的时候,通常不需要实现 Executoropen in new window 接口。但是,如果你想集成一个profiler ,可以使用它。

运行程序

在每一个运行配置 中都存在一个 RunProfileState 对象(从RunProfile.getState() 获取),它描述了一个准备启动的进程,以及运行所需要的像命令行、当前工作文件夹、环境变量等参数。(在运行之前,为了让 运行配置 扩展和其它组件能修改配置参数,所以将 RunProfileState 单独分离出来)

CommandLineStateopen in new windowRunProfileState 接口的标准实现类,它将运行进程和控制台面板封装进了ExecutionResultopen in new window ,但是它不知道该程序实际上是如何启动的。最好使用 GeneralCommandLineopen in new window ,它可以设置命令行参数并执行程序。

如果你想运行基于JVM的程序,你可以使用 JavaCommandLineStateopen in new window ,它能很好的处理JVM的命令,处理像 classpath 之类的参数

使用 OSProcessHandleropen in new window 可以监视进程的执行并捕获其输出内容。当你使用命令行或 Process 对象创建一个 OSProcessHandler 实例的时候,你需要主动调用 startNotify() 方法捕获输出内容。在 OSProcessHandler 中绑定一个 ProcessTerminatedListeneropen in new window 可以在控制台上打印进程的退出状态。

打印程序输出内容

使用CommandLineStateopen in new window 时,会自动创建一个控制台显示面板,并把它绑定到程序的输出上。你也可以自己绑定输出,例如:

  • TextConsoleBuilderFactory.createBuilder(project).getConsole() 创建 ConsoleViewopen in new window 实例

  • ConsoleView.attachToProcess()ConsoleView 绑定到进程上

如果使用了 ANSI escape codes 设置了输出内容的颜色,ColoredProcessHandleropen in new window 会解析颜色并显示到 Console 上。

可以使用 Console 过滤器(Filteropen in new window ) 将输出的某些字符转为超链接。 CommandLineState.addConsoleFilters() 方法可以在 Console 上绑定过滤器(filter),如果 Console 是你手动创建的,可以使用 TextConsoleBuilder.addFilter() 绑定过滤器(filter)

IntelliJ Platform 已经提供了2个过滤器: RegexpFilteropen in new windowUrlFilteropen in new window.

使用代码运行 “运行配置”

如果你想在程序中,使用代码运行某一个 运行配置,最简单的方法是使用 ProgramRunnerUtil.executeConfiguration(RunnerAndConfigurationSettings configuration, Executor executor)

  • configuration 参数可以使用 RunManager.getConfigurationSettings(ConfigurationType) 获取

  • executor 参数可以使用DefaultRunExecutor.getRunExecutorInstance()DefaultDebugExecutor.getDebugExecutorInstance() 获取

上次编辑于:
贡献者: zhaojingbo
Loading...