IntelliJ Plugin 开发之 plugin.xml 配置文件详解(四)_idea plugin.xml_android阿杜的博客-程序员秘密

技术标签: IntelliJ IDEA  Android  Plugin  

前面几篇文章,我们一起了解了 Plugin 的项目创建和运行效果。接下来我们开始静下心来深入了解插件的内容了。

从 plugin .xml 核心配置文件开始。

更消息的内容,请参考官方文档:

http://www.jetbrains.org/intellij/sdk/docs/basics/plugin_structure/plugin_configuration_file.html

 

plugin.xml 文件是核心配置文件,你可以理解成 Java web 开发中的 web.xml 文件,Android 开发中的 AndroidManifest.xml 文件。所有的组件的注册都需要在此文件中进行配置,否则该组件不会生效。

plugin.xml 文件所在位置为 /ProjectRoot/resources/META-INF/plugin.xml。如图:

配置文件内容 + 注释描述:

<!-- url="" specifies the URL of the plugin homepage (displayed in the Welcome Screen and in "Plugins" settings dialog) -->
<idea-plugin url="http://www.jetbrains.com/idea">

  <!-- Plugin name -->
  <name>插件的名称,显示在 IDEA 已安装插件列表中(抱歉,之前的文章截图说明中可能有误)</name>

  <!-- Unique identifier of the plugin.
       Cannot be changed between the plugin versions.
       If not specified, assumed to be equal to <name>. -->
  <id>插件 ID,用于在插件市场中唯一确定身份的标示,在不同版本中,必须保持一致。
建议设置值为:包名 + 插件名称</id>

  <!-- Description of the plugin. -->
  <description>插件功能说明,显示在插件市场当前插件的副标题位置。</description>

  <!-- Description of changes in the latest version of the plugin.
       Displayed in the "Plugins" settings dialog and in the
       plugin repository Web interface. -->
  <change-notes>插件版本更新内容说明</change-notes>

  <!-- Plugin version -->
  <version>插件版本号</version>

  <!-- The vendor of the plugin.
       The optional "url" attribute specifies the URL of the vendor homepage.
       The optional "email" attribute specifies the e-mail address of the vendor.-->
  <vendor url="http://www.jetbrains.com" email="[email protected]" />

  <!-- The unique identifiers of the plugins on which this plugin depends. -->
  <depends>当前插件依赖的其他插件的id,本人没用过</depends>

  <!-- Optional dependency on another plugin.
       If the plugin with the "MySecondPlugin" ID is installed,
       the contents of mysecondplugin.xml (the format of this file
       conforms to the format of plugin.xml) will be loaded. -->
  <depends optional="true" config-file="mysecondplugin.xml">MySecondPlugin</depends>

  <!-- Allows a plugin to integrate its help system (in JavaHelp format)
       with the IDEA help system. The "file" attribute specifies the name
       of the JAR file in the "help" subdirectory of the plugin directory.
       The "path" attribute specifies the name of the helpset file within
       the JAR file.-->
  <helpset file="myhelp.jar" path="/Help.hs" />

  <!-- Minimum and maximum build of IDEA compatible with the plugin -->
  当前插件的起止 IDE 版本支持
  <idea-version since-build="3000" until-build="3999"/>

  <!-- Resource bundle from which the text of plugin descriptions,
       action names and etc. will be loaded -->
  国际化资源文件
  <resource-bundle>messages.MyPluginBundle</resource-bundle>

  <!-- Plugin's application components -->
  ApplicationComponent 注册,已过时。
  <application-components>
    <component>
      <!-- Component's interface class -->
      <interface-class>com.foo.Component1Interface</interface-class>

      <!-- Component's implementation class -->
      <implementation-class>com.foo.impl.Component1Impl</implementation-class>
    </component>
  </application-components>

  <!-- Plugin's project components -->
  ProjectComponent 组件注册,已过时。
  <project-components>
    <component>
      <!-- Interface and implementation classes are the same -->
      <interface-class>com.foo.Component2</interface-class>

      <!-- If the "workspace" option is set "true", the component
           saves its state to the .iws file instead of the .ipr file.
           Note that the <option> element is used only if the component
           implements the JDOMExternalizable interface. Otherwise, the
           use of the <option> element takes no effect.  -->
      <option name="workspace" value="true" />

      <!-- If the "loadForDefaultProject" tag is present, the project component is instantiated also for the default project. -->
      <loadForDefaultProject>
    </component>
  </project-components>

  <!-- Plugin's module components -->
  ModuleComponent 组件注册,已过时。
  <module-components>
    <component>
      <interface-class>com.foo.Component3</interface-class>
    </component>
  </module-components>

  <!-- Actions -->
  Action 组件注册
  <actions>
    <action id="VssIntegration.GarbageCollection" class="com.foo.impl.CollectGarbage" text="Collect _Garbage" description="Run garbage collector">
      <keyboard-shortcut first-keystroke="control alt G" second-keystroke="C" keymap="$default"/>
    </action>
  </actions>

  <!-- Extension points defined by the plugin.
       Extension points are registered by a plugin so that other
       plugins can provide this plugin with certain data. The
       "beanClass" attribute specifies the class the implementations
       of which can be used for the extension point. -->
  扩展点,即定义当前插件某功能可扩展的点,便于被其他插件依赖,并扩展当前插件不完善的功能
  <extensionPoints>
    <extensionPoint name="testExtensionPoint" beanClass="com.foo.impl.MyExtensionBean"/>
  </extensionPoints>

  <!-- Extensions which the plugin adds to extension points
       defined by the IDEA core or by other plugins.
       The "defaultExtensionNs " attribute must be set to the
       ID of the plugin defining the extension point, or to 
       "com.intellij" if the extension point is defined by the
       IDEA core. The name of the tag within the <extensions>
       tag matches the name of the extension point, and the
       "implementation" class specifies the name of the class
       added to the extension point. -->
  扩展,定义具体某类型扩展的实现,扩展其他插件或者 Plugin Platform 默认提供的扩展功能。
  <extensions xmlns="VssIntegration">
    <testExtensionPoint implementation="com.foo.impl.MyExtensionImpl"/>
  </extensions>
</idea-plugin>

在上述代码中都有注释,大概搂了一遍各项配置的含义。下面,针对某几项核心、常用的配置进行更详细的说明:

<id>插件 ID,唯一表示。用户在插件市场众多插件当中唯一确定你的插件。一旦插件 ID 定义好并启用后,后续不可再更改,否则会成为新的插件。</id>

 

<name>插件名称,显示的位置如下图:</name>

 

<description>插件功能说明,如上图中 插件名称下方的描述</description>

<change-notes>插件更新日志描述,建议保留所有版本的更新说明。书写时,建议写上每个版本的版本号,以及内容。内容支持 html 标签,比喻ul,li</change-notes>

<version>插件版本号,如:1.0</version>

 

<vendor url="http://www.jetbrains.com" email="[email protected]" />

vendor 标签为作者主站网址和邮箱配置。便于用户有疑问时联系你。

 

<actions></actions>

actions 标签之间可以配置多个 action 标签。

 

<action 
        id="包名 + 插件名称 + 类名"
        class="com.duke.demo.HelloAction"
        text="HelloActionMenu"
        description="当前插件菜单功能说明" 
        icon="插件图标" 
        keymap="未知" 
        popup="" 
        project-type=""
        use-shortcut-of=""/>
最核心的标签。每一个 action 标签代表一个菜单项或工具栏中的一个按钮。在 action 标签中间,还可以配置 keyboard-shortcut 标签,用来设置快捷键。

 

<keyboard-shortcut first-keystroke="control alt G" second-keystroke="C" keymap="$default"/>

action 的快捷键标签。

first-keystroke:首选快捷键

second-keystroke:备选快捷键

keymap:默认快捷键

 

至此,常用的核心配置项介绍完毕。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/fesdgasdgasdg/article/details/85948666

智能推荐

java和php的aes256,.NET和PHP中的AES256加密_刘俊海的博客-程序员秘密

我将在PHP中使用与现有.NET应用程序相同的密钥来实现aes256加密,以加密相同的密码(相同的密文) . 我将使用相同的IV(16字节)和密钥(32字节)作为.NET应用程序 . 我的问题是,我不明白我如何将密钥和IV从.NET应用程序转换为php字符串(php mycrypt_encrypt函数,我想用于php aes加密,需要IV和密钥作为字符串参数),因为php没有字节数组 . 例如,I...

python 生成等差数列_python生成等差数列_KinG-177的博客-程序员秘密

import numpy as npimport numpy as npdef shulie(first,end,step): x = [] for i in np.arange(first, end,step): x.append(i) return xfirst --首个数字end--尾数字step--间隔...

计算几何_三维凸包(3d convex hull)_RJxiaowu的博客-程序员秘密

const double eps = 1e-8;typedef list&amp;lt;int&amp;gt;::iterator liit;inline int sign(double d){ if(d &amp;lt; -eps) return -1; return (d &amp;gt; eps) ? 1 : 0;}struct point{ double x, y, z; point...

利用Toad管理本地数据库_你是猴子派的救兵吗的博客-程序员秘密

利用Toad管理本地数据库       利用Toad管理本地数据库,相对于使用sqlplus来说,要更加直观和方便,而且,更容易操作一些,对于某些大的表格,查询结果一目了然。总的来说,需要以下几步:第一步:安装本地数据库这个过程和一般的安装没什么区别,但要注意以下两点:1.        在安装数据库的时候有,“创建启动数据库(附加720MB)”,指定全局数据库名:myOrcl,以

前端笔记知识点整合之CSS(下)_RopeHuo的博客-程序员秘密

前端笔记知识点整合之CSS(下) 一、浮动1.1 各个语言的主要知识点HTML:标签语义化(那么怎么样布局才是合理的?没有绝对的对和错)CSS:  样式:  布局:    标准流(标准文档流、普通文档流):盒子模型(width/height+padding+border+margin) 块元素行内元素    浮动...

随便推点

ADO.net与PowerBuilder_itkbase的博客-程序员秘密

 以评测的形式通过一个非常简单的例子,把ADO.NET与PowerBuilder进行多方面的比较,从而揭示两种平台下数据库应用开发能力,包括功能、性能、体系结构的综合评价。1.   评测对象描述        .NET框架提供了强大的WINDOWS FORMS 工具,可以快速开发用户界面。同时,.NET框架提供了丰富的对象用来管理数据库操作,这些类总称为ADO.NET,ADO.NET主要是一种

python 打印十六进制_Python:以十六进制格式打印整数_cuma2369的博客-程序员秘密

python 打印十六进制How to print integers in hexadecimal format in Python? 如何在Python中以十六进制格式打印整数? To print an integer i in hexadecimal format in Python: 要在Python中以十六进制格式打印整数i: print hex(i)Answered by anony...

9.4 Go 数据格式_diaolouan9546的博客-程序员秘密

9.4 Go 数据格式1.1. msgpack格式官方msgpack官网用一句话总结: It’s like JSON. but fast and small. 简单来讲,它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加。msgpack使用示例代码package ma...

博客写作计划_speedoops的博客-程序员秘密

<br />以前写博客主要是把自己感兴趣的东西存下来,没有思考,所以虽然数量不少,但没什么精品<br /> <br />写博客还是得有计划、有目的,坚持不懈 :-)<br /> <br />技术博客<br />csdn.net           C/C++,程序员<br />cnblogs.com     .Net<br />blogjava.com    Java<br />csai.cn             系统分析<br />infoq.com         敏捷<br /

BZOJ 2744 浅谈异或二进制分析及二分图最大团_BerryKanry的博客-程序员秘密

世界真的很大 今天考试的第三题 发现了点性质但是时间复杂度分析不能过 实在是没有什么思路了写了个暴力 寄希望于评测机跑的快一点没想到居然是正解看题先:description: 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着。一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目。 两个国家看成是AB两国

MFC下CSocket编程详解_jdzd123的博客-程序员秘密

转自:http://blog.csdn.net/yejiansnake/article/details/2175778MFC下CSocket编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN):    CSocket::Create 初始化(一般写服务器程序都不要用为好,用下面的 CSocket::Socket 初始化)   CSocket

推荐文章

热门文章

相关标签