插件项目中的 plugin.xml 是一个很重要的文件,它向 IntelliJ Platform 描述了我们插件的样子,如下:

  1. <idea-plugin>
  2. <id>top.smallzh.background-image-x</id>
  3. <name>BackgroundImageX</name>
  4. <vendor email="smallzh@yeah.net" url="https://smallzh.top">smallzh</vendor>
  5. <!-- please see https://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
  6. on how to target different products -->
  7. <depends>com.intellij.modules.platform</depends>
  8. <extensions defaultExtensionNs="com.intellij">
  9. <toolWindow id="Background Image X" anchor="right" icon="/top/smallzh/tools/bix/icons/bix.svg"
  10. factoryClass="top.smallzh.tools.bix.ui.BixToolWindowFactory" />
  11. <applicationConfigurable id="backgroundImageXConfiguration" displayName="Background Image X"
  12. instance="top.smallzh.tools.bix.ui.BixConfiguration" groupId="tools"/>
  13. <applicationService serviceImplementation="top.smallzh.tools.bix.BixImagesStorage" />
  14. </extensions>
  15. <actions>
  16. <group id="backgroundImageX" text="Background Image X" description="Background Image X">
  17. <add-to-group group-id="ViewMenu" anchor="before" relative-to-action="ToggleFullScreenGroup"/>
  18. <separator/>
  19. <action id="randomBackgroundImage" class="top.smallzh.tools.bix.action.RandomBackground"
  20. text="Random Background Image"/>
  21. <action id="clearBackgroundImage" class="top.smallzh.tools.bix.action.ClearBackground"
  22. text="Clear Background Image"/>
  23. <action id="downloadBackgroundImage" class="top.smallzh.tools.bix.action.DownloadBackground"
  24. text="Download Background Image" />
  25. <action id="removeBackgroundImage" class="top.smallzh.tools.bix.action.RemoveBackground"
  26. text="Remove Background Image" />
  27. </group>
  28. </actions>
  29. </idea-plugin>

1 关键Tag说明

1.1 actions节点

格式如下:

  1. <!-- Actions -->
  2. <actions>
  3. <action id="VssIntegration.GarbageCollection" class="com.foo.impl.CollectGarbage" text="Collect _Garbage" description="Run garbage collector">
  4. <keyboard-shortcut first-keystroke="control alt G" second-keystroke="C" keymap="$default"/>
  5. </action>
  6. </actions>

其中,每一个 action 表示一个按钮,详细的,我们在 创建按钮部分 说明。

1.2 extensions节点

格式如下:

  1. <extensions defaultExtensionNs="VssIntegration">
  2. <testExtensionPoint implementation="com.foo.impl.MyExtensionImpl"/>
  3. </extensions>

其中,每一个子节点表示一种更通用的 扩展内容,如 toolWindow。

1.3 listener监听器

包含2种,application级别和project级别,如下:

  1. <!-- Application-level listeners -->
  2. <applicationListeners>
  3. <listener class="com.foo.impl.MyListener" topic="com.intellij.openapi.vfs.newvfs.BulkFileListener"/>
  4. </applicationListeners>
  5. <!-- Project-level listeners -->
  6. <projectListeners>
  7. <listener class="com.foo.impl.MyToolwindowListener" topic="com.intellij.openapi.wm.ex.ToolWindowManagerListener"/>
  8. </projectListeners>

监听 IntelliJ Platform 的各种事件。

2 关键Tag的理解

Tag 说明
按钮(Action) IntelliJ平台上在Menu、toolBar上的拓展点
扩展(Extension) 在其他窗口上提供扩展,如配置页、toolWindow等等
服务(Service) 是插件中一个运行在后台的组件,通过ServiceManager.getService()获取,IntelliJ平台保证服务只有一个
监听器(Listener) 插件用来监听消息栈中的事件消息,采用懒加载模式,当第一次收到消息时创建实例

参考

plugin.xml配置文件