原文链接:
http://www.jetbrains.org/intellij/sdk/docs/basics/run_configurations/run_configuration_management.html
本文档描述了用于运行配置的主要类和常见用例。
配置类型
实现任何运行配置类型的起点是ConfigurationType
接口。当用户打开“编辑运行配置 ”对话框并执行“新增 ”操作时就会列出可用配置类型:
这里的每种类型都可以表示为ConfigurationType
的实例并可以像以下代码注册:
实现此接口的最简单的方法是使用ConfigurationTypeBase
基类。为了使用它,你需要继承它并提供配置类型参数(ID、名称、描述和图标)作为构造函数的参数。 除此之外,你需要调用addFactory()
方法添加配置工厂。
配置工厂
所有运行配置都由特定ConfigurationType
注册的ConfigurationFactory
创建。一个ConfigurationType
可能有一个以上ConfigurationFactory
:
ConfigurationFactory
的关键API和你需要实现的唯一方法是createTemplateConfiguration
。 这个方法每个项目调用一次以创建模板运行配置。
所有实际运行配置(从工作空间加载或由用户创建)都通过createConfiguration
方法克隆模板来调用。
你可以通过重写getIcon
、getAddIcon
、getName
和默认设置方法自定义配置工厂的其它方面。这些额外设置是可选的。
运行配置
运行配置本身由RunConfiguration
接口表示。 这里的“运行配置 ”是一些可以执行的命名配置,如同过main()
启动的应用类、测试、特定机器/端口的远程调试。
下面是为特定项目定义的Java运行配置的示例:
当实现运行配置时,你可能需要使用以下公共基类之一:
-
RunConfigurationBase
是一个通用基类,它包含运行配置的最基本的实现; -
LocatableConfigurationBase
是一个通用基类,它应该用于通过RunConfigurationProducer
从上下文创建的配置。它支持从设置自动生成配置的名称,并跟踪用户是否更改了名称; -
ModuleBasedConfiguration
是与特定模块相关联的配置的基类(例如,Java运行配置使用所选模块来确定运行类路径)。
设置编辑
常见运行配置设置可能通过以下方式修改:
RunConfiguration
-specific UI。 它由SettingsEditor
处理:
-
getComponent()
方法由IDE调用并显示运行配置指定UI; -
resetFrom()
用来丢弃通过该UI进行的所有未确认的用户更改; -
applyTo()
用来确认更改,即复制当前UI状态到目标设置对象。
持久化
运行配置可以持久化,即它们可以保存到文件系统并在IDE启动时加载。这是通过相关RunConfiguration
类的writeExternal()
和readExternal()
方法执行的。
IntelliJ平台 存储的实际配置由RunnerAndConfigurationSettings
类的实例表示,它将运行配置与特定于运行程序的设置相结合,以及跟踪某些运行配置标志,如"temporary"或"singleton"。
当你需要从代码创建运行配置时,处理此类的实例将变得有必要。 你可以通过以下两个步骤完成:
-
RunManager.createConfiguration()
创建RunnerAndConfigurationSettings
的实例; -
RunManager.addConfiguration()
通过添加配置到项目中的的共享配置列表或工作空间文件的本地配置列表实现持久化。
重构支持
大多数运行配置在设置中包含类,文件或目录的引用,当重命名或移动相应元素时通常需要更新这些设置。
为了支持这一点,你的运行配置需要实现RefactoringListenerProvider
接口。
在你getRefactoringElementListener()
方法的实现中,你需要检查被重构的元素是否是你的运行配置引用的,如果是,你返回一个RefactoringElementListener
,根据元素的新名称和位置更新你的配置 。
从上下文创建配置
许多插件支持从上下文自动创建运行配置,以便用户只需单击应用程序或测试类便可以使用正确的运行配置类型自动运行。 为了支持这一点,你需要提供RunConfigurationProducer
的实现
接口并在plugin.xml中将其注册为
。(请注意,此API已在IntelliJ IDEA 13中重新设计;旧的RuntimeConfigurationProducer
是相同API的更混乱的版本)。
你需要实现的两个主要方法是:
-
setupConfigurationFromContext
接受你的类型的空配置和包含源代码位置信息的ConfigurationContext
(通过调用getLocation()
或getPsiLocation()
)。你的实现需要检查此位置是否适用于你的配置类型(例如如果它在你支持的语言文件中)。如果不合适,你需要返回false,否则你需要将正确的上下文特定设置放入运行配置并返回true; -
isConfigurationFromContext
检查您的类型的指定配置是否从指定的上下文创建。 实现此方法允许你重复使用适用于当前上下文的现有运行配置,而不是创建新的上下文,并且可能忽略用户在现有上下文中执行的定制。
注意:为了支持从上下文创建的配置的自动命名,你的配置应使用
LocatableConfigurationBase
作为基类。