Execution
标准执行运行操作将执行以下步骤:
-
用户选择运行配置(例如,通过从运行配置组合框中选择一个)和执行器(例如,通过按执行器创建的工具栏按钮).
-
通过轮询所有已注册的程序运行程序并询问是否可以使用指定的执行程序ID运行指定的运行配置文件,选择将实际执行该进程的程序运行器.
-
创建
ExecutionEnvironment
对象. 此对象聚合执行该过程所需的所有设置,以及所选的ProgramRunner
. -
调用
ProgramRunner.execute()
,接收执行程序和执行环境.
ProgramRunner.execute()
的实现通过以下步骤来执行该过程:
*调用RunProfile.getState()
方法创建RunProfileState
对象,描述一个过程
即将开始.
在此阶段,初始化命令行参数,环境变量和启动过程所需的其他信息.
-
RunProfileState.execute()
被调用. 它启动进程,将一个ProcessHandler
附加到它的输入和输出流,创建一个控制台来显示进程输出,并返回一个ExecutionResult
聚合控制台和进程处理程序的对象. -
创建并调用
RunContentBuilder
对象,以在Run或Debug工具窗口的选项卡中显示执行控制台.
执行人
Executor
接口描述了执行任何可能的运行配置的特定方式.
默认情况下, IntelliJ Platform 提供的三个默认执行程序是_Run _,_Debug_和带有Coverage_的_Run. 每个执行程序都有自己的工具栏按钮,它使用此执行程序启动选定的运行配置,以及使用此执行程序启动配置的自己的上下文菜单项.
作为插件开发人员,通常不需要实现Executor
接口.
但是,它可能很有用,例如,如果您正在实现探查器集成并希望提供使用性能分析执行任何配置的可能性.
运行一个进程
每个运行配置实现都会出现RunProfileState
接口,作为返回值RunProfile.getState()
.
它描述了一个准备启动的进程,并保存了诸如命令行,当前工作目录和要启动的进程的环境变量之类的信息.
(作为执行流程中单独步骤的RunProfileState
的存在允许运行配置扩展和其他组件修补配置并在执行之前修改参数.)
用作RunProfileState
实现的标准基类是CommandLineState
.
它包含将正在运行的进程和控制台放在[ExecutionResult
]中的逻辑(upsource:///platform/lang-api/src/com/intellij/execution/ExecutionResult.java),但不知道
这个过程实际上是如何开始的.
要启动该过程,最好使用GeneralCommandLine
类,该类负责设置
命令行参数和执行过程.
或者,如果您需要运行的进程是基于JVM的进程,则可以使用JavaCommandLineState
基类.
它了解JVM的命令行参数,并可以处理计算JVM的类路径等细节.
要监视进程的执行并捕获其输出,通常使用OSProcessHandler
类.
一旦从命令行或Process对象创建了“OSProcessHandler”实例,就需要调用startNotify()
方法来开始捕获其输出.
您可能还想将一个ProcessTerminatedListener
附加到OSProcessHandler
,以便退出状态为
该过程将显示在控制台中.
显示流程输出
如果您正在使用CommandLineState
,将自动创建一个控制台视图并将其附加到该进程的输出.
或者,您可以自己安排:
*TextConsoleBuilderFactory.createBuilder(project).getConsole()
创建一个ConsoleView
实例
*ConsoleView.attachToProcess()
将它附加到进程的输出.
如果您运行的进程使用ANSI转义码为其输出着色,则ColoredProcessHandler
类将
解析它并在IntelliJ控制台中显示颜色.
Console filters允许您将流程输出中找到的某些字符串转换为可单击的超链接.
要将过滤器附加到控制台,请使用CommandLineState.addConsoleFilters()
,或者,如果您手动创建控制台,请使用TextConsoleBuilder.addFilter()
.
您可能想要重用的两个常见过滤器实现是RegexpFilter
和UrlFilter
.
从代码开始运行配置
如果您有一个需要执行的现有运行配置,最简单的方法是使用ProgramRunnerUtil.executeConfiguration()
.
该方法采用Project
,RunnerAndConfigurationSettings
,以及Executor
.
要获取现有配置的RunnerAndConfigurationSettings
,您可以使用,例如,RunManager.getConfigurationSettings(ConfigurationType)
.
作为最后一个参数,您通常会传递DefaultRunExecutor.getRunExecutorInstance()
或DefaultDebugExecutor.getDebugExecutorInstance()
.