IDEA插件开发---Extension Points
Posted 流子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA插件开发---Extension Points相关的知识,希望对你有一定的参考价值。
通过在插件中定义扩展点,您可以允许其他插件扩展您的插件的功能。有两种类型的扩展点:
接口扩展点允许其他插件使用代码扩展您的插件。当您定义接口扩展点时,您指定了一个接口,其他插件将提供实现该接口的类。然后,您将能够在这些接口上调用方法。
Bean扩展点允许其他插件使用data扩展您的插件。您指定扩展类的完全限定名称,其他插件将提供将转换为该类实例的数据。
声明扩展点
您可以在插件配置文件plugin.xml的和部分中声明扩展和扩展点。
要在插件中声明扩展点,请在plugin.xml中添加一个部分。然后插入一个子元素,该子元素定义扩展点名称和允许扩展插件功能的 bean 类或接口的名称,分别在,和属性中。namebeanClassinterface
myPlugin /META-INF /plugin.xml
my.plugin<extensionPoint
name="myExtensionPoint2"
interface="com.example.MyInterface"/>
该name属性为此扩展点分配一个唯一名称。使用扩展点所需的完全限定名称是通过前缀+ .:my.plugin.myExtensionPoint1和my.plugin.myExtensionPoint2.
该beanClass属性设置一个 bean 类,该类指定一个或多个使用该注解进行@Attribute注解的属性。请注意,bean 类不遵循 JavaBean 标准。
该interface属性设置了一个接口,该接口有助于扩展点的插件必须实现。
该area属性决定了扩展将被实例化的范围。由于扩展应该是无状态的,所以不建议使用非默认。必须是IDEA_APPLICATION应用程序(默认)、IDEA_PROJECT项目或IDEA_MODULE模块范围之一。
对扩展点有贡献的插件将从plugin.xml文件中读取这些属性。
请参阅捆绑插件 API 源部分,解释如何将扩展点源公开给其他插件。
样本
MyBeanClass为了澄清这一点,请考虑上述plugin.xml文件中使用的以下示例bean 类:
myPlugin /src /com /myplugin /MyBeanClass.java
public class MyBeanClass extends AbstractExtensionPointBean
@Attribute(“key”)
public String key;
@Attribute(“implementationClass”)
public String implementationClass;
public String getKey()
return key;
public String getClass()
return implementationClass;
有关如何提供智能完成/验证的信息,请参阅扩展属性代码洞察。
对于anotherPlugin中的上述扩展点用法,将如下所示(另请参见声明扩展):
anotherPlugin /META-INF /plugin.xml
another.pluginmy.plugin
<myExtensionPoint2
implementation="another.MyInterfaceImpl"/>
使用扩展点 要在运行时引用所有已注册的扩展实例,请声明传入与其在 plugin.xml 中的声明ExtensionPointName匹配的完全限定名称。
myPlugin /src /com /myplugin /MyExtensionUsingService.java
public class MyExtensionUsingService
private static final ExtensionPointName EP_NAME =
ExtensionPointName.create(“my.plugin.myExtensionPoint1”);
public void useExtensions()
for (MyBeanClass extension : EP_NAME.getExtensionList())
String key = extension.getKey();
String clazz = extension.getClass();
// …
声明的装订线图标允许导航到plugin.xmlExtensionPointName中的相应声明。
动态扩展点
要支持动态插件(2020.1 及更高版本),扩展点必须遵守特定的使用规则:
每次使用都会枚举扩展,并且扩展实例不会存储在任何地方
或者,ExtensionPointListener可以执行数据结构的必要更新(通过注册ExtensionPointName.addExtensionPointListener())
匹配这些条件的扩展点可以通过在声明中添加来标记为动态的:dynamic=“true”
通过Plugin DevKit |突出显示所有非动态扩展点 插件描述符 | 在 IntelliJ IDEA 2020.1 或更高版本中提供Plugin.xml 动态插件验证检查。以前的版本还将该dynamic属性突出显示为“实验性”。以上是关于IDEA插件开发---Extension Points的主要内容,如果未能解决你的问题,请参考以下文章
idea Plugin "Maven Integration Extension" was not loaded: required plugin "Maven Int
iOS开发------Widget(Today Extension)插件化开发