运行配置管理

走着路睡觉大约 5 分钟

运行配置管理

这个文档包括了 运行配置 的使用相关类和常用示例。

运行配置类型

运行配置类型的基础接口是 ConfigurationTypeopen in new window ,当用户在 'Edit run configurations' 对话框里点击 'Add' 按钮时,会显示所有可用的配置类型,如下图:

每一种配置都是 ConfigurationTypeopen in new window 的子类,并在 plugin.xml 里进行了注册

<extensions defaultExtensionNs="com.intellij">
    <configurationType
        implementation="org.jetbrains.plugins.gradle.service.execution.GradleExternalTaskConfigurationType"/>
</extensions>

实现ConfigurationTypeopen in new window 最简单的实现方法是继承 ConfigurationTypeBaseopen in new window 接口,并在 构造器中指定ID, name, description, icon 等参数, 然后调用 addFactory() 方法增加你的配置工厂。

配置工厂

plugin.xml 中注册的configurationType 类型的扩展 ,用它设置的配置工厂(ConfigurationFactoryopen in new window )生成所有的运行配置。一个 configurationType 可能有多个 ConfigurationFactoryopen in new window ,如下图,Docker 配置项里有3个 ConfigurationFactory

要实现多配置项,需要实现 ConfigurationFactory.createTemplateConfigurationopen in new window 方法,用户每创建一个 运行配置 都会调用一次该方法。

包括用户创建的和从工作空间加载的所有真实运行的 运行配置 都是使用 ConfigurationFactory.createConfigurationopen in new window 方法克隆的模板

可以通过可选的 ConfigurationFactory.getIcon, ConfigurationFactory.getAddIcon, ConfigurationFactory.getName 等方法修改其它配置

运行配置

新增 运行配置,根据需求可以选择继承下面的某个类:

设置编辑器

可以通过以下方式修改运行配置

SettingsEditoropen in new window 处理 RunConfigurationopen in new window 的UI显示

  • SettingsEditor.getComponent() :显示运行配置 时会调用该方法

  • SettingsEditor.resetFrom() 重置 运行配置

  • SettingsEditor.applyTo() 加载运行配置 ,会把当前的UI状态复制到目标配置对象里

持久化

运行配置 使用RunConfigurationopen in new windowwriteExternal() 存储到文件系统中,在IDE启动的时候使用 readExternal() 重新加载配置。

实际的存储操作由RunnerAndConfigurationSettingsopen in new window 执行,它合并了运行配置动态设置 ,并根据某些 标记(例如:是否是临时的,是否是单例的)来执行相应的操作

创建运行配置 的时候需要获取 RunnerAndConfigurationSettings 类的实例,分为2步,步骤如下:

  • RunManager.createConfiguration() 创建 RunnerAndConfigurationSettings 实例

  • 通过RunManager.addConfiguration() 方法进行持久化存储,如果是共享的配置会存储到项目里,如果是本地化配置会存储到 workspace 文件里

重构

大多数的运行配置 包括一些类的引用,文件或文件夹等,当这些引用对象重命名或移动的时候需要更新相关的引用。

如果需要支持重构,你的运行配置 需要实现 RefactoringListenerProvideropen in new window 接口

RefactoringListenerProvider.getRefactoringElementListener() 的实现方法里,判断你是否使用了传过来的 PSIElement,如果是就返回一个 RefactoringElementListeneropen in new window 对象,根据元素的新名称和位置来更新你的引用。

根据上下文创建配置

很多插件支持根据上下文来自动创建运行配置,例如,可以根据是在应用上运行,还是在测试类上运行来运行相应的配置。要实现这个需求,需要实现RunConfigurationProduceropen in new window ,并在 plugin.xml 里注册为 <runConfigurationProducer> 类型的扩展 。由于以前的API比较容易混淆,所以在在IntelliJ IDEA 13 中进行了重新设计。

主要需要实现以下2个方法:

  • setupConfigurationFromContext() 方法,会收到一个和你的类型有关的空白配置(configuration) ,以及包含代码位置的 ConfigurationContext (可以使用getLocation() 或 getPsiLocation()方法获取代码位置)对象。可以根据代码位置判断是否支持该配置类型(例如:你的编程语言是否支持这种类型的文件),如果不支持,返回 false ,如果支持,需要在空白配置(configuration) 中添加你的相关配置并返回 true

  • isConfigurationFromContext() :检查传过来的配置是否是根据你指定的上下文创建的。在这个方法里,你可以重新设置一个新的运行配置,或忽略用户的某些自定义配置

注意:如果要支持 根据上下文创建配置,需要继承 LocatableConfigurationBaseopen in new window

从侧边栏运行

查看 RunLineMarkerContributoropen in new window 和它的实现类

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