最近想学习一下studio中的插件开发,下载安装IntelliJ IDEA,在运行插件工程,打包插件在studio中加载时出现了几个问题,此篇文章用来简单记录插件开发的过程和遇到问题的解决方法。
下载安装IntelliJ IDEA
点击官网根据版本进行下载,其中Community为免费版。
下载后进行安装,安装后点击启动IntelliJ IDEA。
开发插件的过程
新建一个插件工程
点击next,如下:
点击Finish,成功创建一个插件工程。
工程目录结构如下图所示:
开发插件
成功创建插件工程后,会自动生成插件的配置文件plugin.xml,如下:
<idea-plugin>
<!--插件id-->
<id>com.your.company.unique.plugin.id</id>
<!--插件名称-->
<name>Plugin display name here</name>
<version>1.0</version>
<!--开发者信息-->
<vendor email="support@yourcompany.com" url="http://www.yourcompany.com">YourCompany</vendor>
<!--插件说明-->
<description><![CDATA[
Enter short description for your plugin here.<br>
<em>most HTML tags may be used</em>
]]></description>
<change-notes><![CDATA[
Add change notes here.<br>
<em>most HTML tags may be used</em>
]]>
</change-notes>
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<idea-version since-build="173.0"/>
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
on how to target different products -->
<!-- uncomment to enable plugin in all products
<depends>com.intellij.modules.lang</depends>
-->
<!--依赖的其他插件能力-->
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
</extensions>
<!--依赖动作-->
<actions></actions>
</idea-plugin>
在src下右击创建Action文件,负责插件开发的内容,是插件功能的入口,如下图所示:
其中:
Action ID:代表这个Action的唯一标示。
Class Name:类名
Name:这个插件在菜单上的名称
Description:关于这个插件的描述信息
Groups:代表这个插件会出现的位置。比如想让这个插件出现在Code菜单下的第一次选项,图中选择CodeMenu(Code),右边Anchor选择First
Keyboard Shortcuts:快捷键设置。
创建完成后,生成了一个继承AnAction的Action文件,即MyTestDemoAction,实现方法actionPerformed,在这个实现方法中设置插件的开发内容,如下:
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
public class MyTestDemoAction extends AnAction {
@Override
public void actionPerformed(AnActionEvent event) {
// TODO: insert action logic here
Project project = event.getData(PlatformDataKeys.PROJECT);
Messages.showInputDialog(
project,
"What is your name?",
"Input your name",
Messages.getQuestionIcon());
}
}
此时相应的plugin.xml中会生成相应的Action信息,如下:
<!--依赖动作-->
<actions>
<!-- Add your actions here -->
<action id="MyTestDemo.ID" class="test.MyTestDemoAction" text="MyTestDemoHelper" description="测试看看呢">
<add-to-group group-id="CodeMenu" anchor="first"/>
</action>
</actions>
此时简单的插件开发的例子就完成了。
运行插件
点击Run plugin发生错误:
IntelliJ IDEA Class JavaLaunchHelper is implemented in both **One of the two will be used. Which one is undefined。
因为安装IntelliJ Idea会默认安装一个JDK,运行时会检测安装的所有的jdk版本,需要选择一个。
解决办法:
点击IntelliJ Idea最上面菜单的Help-Edit Custom Properties,没有这个properties文件的话,IJ会提示创建,然后在里面加上
idea.no.launcher=true
重启IntelliJ Idea。
可以在Project Settings中配置工程对应版本的jdk。
此时再次运行,会生成一个新的IntelliJ Idea窗口,在新窗口的菜单code中可以看到,如下:
MyTestDemoHelper是插件名字,点击插件,如下:
此时插件运行正常,开发工作完成。
在studio中运行插件
那怎么在studio中运行开发后的插件呢,需要插件的打包和安装:
插件打包
在开发的IntelliJ Idea中,点击build->Prepare Plugin Modelu “MyTestDemo” For Deployment,如下图所示:
之后会在选择位置生成一个jar文件。
在studio中加载插件
在studio中,点击Preference->Plugins->Install plugin from disk…安装打包后的插件jar,然后重启studio,查看studio的菜单,如下:
可以看到显示了对应的插件MyTestDemoHelper,点击MyTestDemoHelper没反应,并发现bug提示,如下:
null
java.lang.NullPointerException
查找资料发现解决方法:
在创建自定义的XXAction类时,需要保证自己的XXAction类在某个package中。
之后测试成功,如下:
如果需要所有人都可以使用开发后的插件还需要插件的发布等等。
参考文档:
https://www.jianshu.com/p/b0c7218678d8 https://blog.xiaohansong.com/idea-plugin-development.html https://stackoverflow.com/questions/43003012/class-javalaunchhelper-is-implemented-in-two-places