运行配置管理
运行配置管理
这个文档包括了 运行配置 的使用相关类和常用示例。
运行配置类型
运行配置类型的基础接口是 ConfigurationType ,当用户在 'Edit run configurations' 对话框里点击 'Add' 按钮时,会显示所有可用的配置类型,如下图:
每一种配置都是 ConfigurationType 的子类,并在 plugin.xml 里进行了注册
<extensions defaultExtensionNs="com.intellij">
<configurationType
implementation="org.jetbrains.plugins.gradle.service.execution.GradleExternalTaskConfigurationType"/>
</extensions>
实现ConfigurationType 最简单的实现方法是继承 ConfigurationTypeBase 接口,并在 构造器中指定ID, name, description, icon 等参数, 然后调用 addFactory() 方法增加你的配置工厂。
配置工厂
在plugin.xml 中注册的configurationType 类型的扩展 ,用它设置的配置工厂(ConfigurationFactory )生成所有的运行配置。一个 configurationType 可能有多个 ConfigurationFactory ,如下图,Docker 配置项里有3个 ConfigurationFactory
要实现多配置项,需要实现 ConfigurationFactory.createTemplateConfiguration 方法,用户每创建一个 运行配置 都会调用一次该方法。
包括用户创建的和从工作空间加载的所有真实运行的 运行配置 都是使用 ConfigurationFactory.createConfiguration 方法克隆的模板
可以通过可选的 ConfigurationFactory.getIcon, ConfigurationFactory.getAddIcon, ConfigurationFactory.getName 等方法修改其它配置
运行配置
新增 运行配置,根据需求可以选择继承下面的某个类:
RunConfigurationBase :比较常用,包含了大多数的基础实现
LocatableConfigurationBase :可以使用 RunConfigurationProducer 根据上下文生成不同的配置。它支持自动生成配置名称,并能跟踪用户是否修改修改了名称。
ModuleBasedConfiguration :和Module相关(例如:Java的运行配置会根据选择的Module确定不同的classpath)
设置编辑器
可以通过以下方式修改运行配置 :
SettingsEditor 处理 RunConfiguration 的UI显示
SettingsEditor.getComponent() :显示运行配置 时会调用该方法
SettingsEditor.resetFrom() 重置 运行配置
SettingsEditor.applyTo() 加载运行配置 ,会把当前的UI状态复制到目标配置对象里
持久化
运行配置 使用RunConfiguration 的 writeExternal() 存储到文件系统中,在IDE启动的时候使用 readExternal() 重新加载配置。
实际的存储操作由RunnerAndConfigurationSettings 执行,它合并了运行配置和动态设置 ,并根据某些 标记(例如:是否是临时的,是否是单例的)来执行相应的操作
创建运行配置 的时候需要获取 RunnerAndConfigurationSettings 类的实例,分为2步,步骤如下:
RunManager.createConfiguration() 创建 RunnerAndConfigurationSettings 实例
通过RunManager.addConfiguration() 方法进行持久化存储,如果是共享的配置会存储到项目里,如果是本地化配置会存储到 workspace 文件里
重构
大多数的运行配置 包括一些类的引用,文件或文件夹等,当这些引用对象重命名或移动的时候需要更新相关的引用。
如果需要支持重构,你的运行配置 需要实现 RefactoringListenerProvider 接口
在 RefactoringListenerProvider.getRefactoringElementListener() 的实现方法里,判断你是否使用了传过来的 PSIElement,如果是就返回一个 RefactoringElementListener 对象,根据元素的新名称和位置来更新你的引用。
根据上下文创建配置
很多插件支持根据上下文来自动创建运行配置,例如,可以根据是在应用上运行,还是在测试类上运行来运行相应的配置。要实现这个需求,需要实现RunConfigurationProducer ,并在 plugin.xml 里注册为 <runConfigurationProducer> 类型的扩展 。由于以前的API比较容易混淆,所以在在IntelliJ IDEA 13 中进行了重新设计。
主要需要实现以下2个方法:
setupConfigurationFromContext() 方法,会收到一个和你的类型有关的空白配置(configuration) ,以及包含代码位置的 ConfigurationContext (可以使用getLocation() 或 getPsiLocation()方法获取代码位置)对象。可以根据代码位置判断是否支持该配置类型(例如:你的编程语言是否支持这种类型的文件),如果不支持,返回 false ,如果支持,需要在空白配置(configuration) 中添加你的相关配置并返回 true
isConfigurationFromContext() :检查传过来的配置是否是根据你指定的上下文创建的。在这个方法里,你可以重新设置一个新的运行配置,或忽略用户的某些自定义配置
注意:如果要支持 根据上下文创建配置,需要继承 LocatableConfigurationBase
从侧边栏运行
查看 RunLineMarkerContributor 和它的实现类