精华内容
下载资源
问答
  • 详述 IntelliJ IDEA 插件的安装及使用方法

    万次阅读 多人点赞 2017-10-19 20:29:08
    温馨提示:IntelliJ IDEA 支持非常多的插件,熟练的使用插件,能够有效提高我们的开发效率以及用户体验。 正文首先,进入插件安装界面: Mac:IntelliJ IDEA -> Preferences -> Plugins; Windows:File -> Settings ...

    温馨提示:IntelliJ IDEA 支持非常多的插件,熟练的使用插件,能够有效提高我们的开发效率以及用户体验。

    正文

    前些天发现了一个感觉还不错的人工智能学习网站,写的通俗易懂,风趣幽默,感兴趣的童鞋可以了解一下,点击跳转到教程

    首先,进入插件安装界面:

    • Mac:IntelliJ IDEA -> Preferences -> Plugins;
    • Windows:File -> Settings -> Plugins.

    plugins

    • 标注 1:显示 IntelliJ IDEA 的插件分类,
    • All plugins:显示 IntelliJ IDEA 支持的所有插件;
    • Enabled:显示当前以前启用的插件;
    • Disabled:显示当前未启用的插件;
    • Bundled:显示 IntelliJ IDEA 所有自带的插件;
    • Custom:显示我们自己安装的插件。
    • 标注 2:打钩表示为已经启用的插件;
    • 标注 3:安装 JetBrains 开发的插件;
    • 标注 4:安装插件仓库提供的插件;
    • 标注 5:安装本地已经下载完的插件。

    如上图所示,显示了 IntelliJ IDEA 对插件的良好支持。以阿里巴巴最近新推出的「阿里巴巴代码规范检查插件」为例,在搜索区输入Alibaba,就会显示出相近名称的插件(如果显示No Plugins found,则点击Serach in repositories进行仓库搜索),然后点击Install,即可安装此插件。在此,需要注意的是:插件安装成功后,需要重新启动 IntelliJ IDEA 使插件生效

    3

    此外,当我们创建一个 IntelliJ IDEA 当前配置并不支持的文件格式时,IntelliJ IDEA 会自动识别此文件,并提示我们下载对应的插件,对其进行支持。如下图所示,我们创建了一个名为MarkdownPlugins.md的 Markdown 格式的文件,但当前我们的 IntelliJ IDEA 并没有支持 Markdown 的插件,这时 IntelliJ IDEA 就会自动提示我们安装 Markdown 插件:

    2

    如上图所示,当我们点击Install plugins之后,选择对应的插件下载并安装(自动),然后重新启动 IntelliJ IDEA,并输入 Markdown 格式的内容,进行测试:

    7

    如上图所示,显然 Markdown 插件安装成功,IntelliJ IDEA 已经能够识别 Markdown 的语法啦!

    常用插件推荐

    插件名称 插件介绍 官网地址
    Alibaba Java Coding Guidelines 阿里巴巴代码规范检查插件 https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines
    Key promoter 快捷键提示插件 https://plugins.jetbrains.com/plugin/4455?pr=idea
    Grep Console 自定义控制台输出格式插件 https://plugins.jetbrains.com/idea/plugin/7125-grep-console
    CheckStyle-IDEA 代码规范检查插件 https://plugins.jetbrains.com/plugin/1065?pr=idea
    FindBugs-IDEA 潜在 Bug 检查 https://plugins.jetbrains.com/plugin/3847?pr=idea
    MetricsReloaded 代码复杂度检查 https://plugins.jetbrains.com/plugin/93?pr=idea
    Statistic 代码统计插件 https://plugins.jetbrains.com/plugin/4509?pr=idea
    JRebel Plugin 热部署插件 https://plugins.jetbrains.com/plugin/?id=4441
    CodeGlance 显示代码地图插件 https://plugins.jetbrains.com/plugin/7275?pr=idea
    Markdown Navigator Markdown 编辑器插件 https://plugins.jetbrains.com/plugin/7896?pr=idea
    Eclipse Code Formatter Eclipse 代码风格格式化插件 https://plugins.jetbrains.com/plugin/6546?pr=idea
    Jindent-Source Code Formatter 自定义模板插件 http://plugins.jetbrains.com/plugin/2170?pr=idea
    Maven Helper Maven 辅助插件 https://plugins.jetbrains.com/plugin/7179-maven-helper
    Properties to YAML Converter Properties 转 YAML 格式插件 https://plugins.jetbrains.com/plugin/8000-properties-to-yaml-converter
    Git Flow Integration Git Flow 集成插件 https://plugins.jetbrains.com/plugin/7315-git-flow-integration

    ———— ☆☆☆ —— 返回 -> 史上最简单的 IntelliJ IDEA 教程 <- 目录 —— ☆☆☆ ————

    展开全文
  • 俗话说:"工欲善其事必先利其器",小帅从项目实战的角度在众多的idea插件中挑选了10款开发必备的神器,帮助大家在日常工作学习编码中提升开发效率。 1 Key Promoter X 实用指数:★★★★★ 装逼指数:★ 你还...

     号外号外!《死磕 Java 并发编程》系列连载中,大家可以关注一波:

    「死磕 Java 并发编程05」阿里面试失败后,一气之下我图解了Java中18把锁

    「死磕 Java 并发编程04」说说Java Atomic 原子类的实现原理

    「死磕 Java 并发编程03」阿里二面,面试官:说说 Java CAS 原理?

    「死磕 Java 并发编程02」面试官:说说什么是 Java 内存模型(JMM)?

    「死磕 Java 并发编程01」10张图告诉你Java并发多线程那些破事

    大家好,我是雷小帅,今天给大家推荐开发利器,保证你效率蹭蹭蹭上升。

    俗话说:"工欲善其事必先利其器",小帅从项目实战的角度在众多的idea插件中挑选了10款开发必备的神器,帮助大家在日常工作学习编码中提升开发效率。

    1 Key Promoter X

    实用指数:★★★★★

    装逼指数:★

    你还在为记不住快捷键烦恼吗,Key Promoter X可以帮助你快速记住常用的快捷键。当你在idea中用鼠标点击菜单,它可以显示对应的快捷键以及点击次数。使用一段时间后有助于过渡到更快、无鼠标的开发。

    2 Alibaba Java Coding Guidelines

    实用指数:★★★★★

    装逼指数:★★

    这是阿里巴巴官方出品的一款代码静态检查插件,它可以针对整个项目或者单个文件进行检查,扫描完成后会生成一份检查报告,根据报告修改代码。

    3 CodeGlance

    实用指数:★★★

    装逼指数:★★

    安装完之后会在代码编辑区的右上角显示一个缩小预览区,类似于王者荣耀或者LOL的地图功能。如果一个文件有上千行代码,可以直接在预览区里拖动快速定位到对应的代码行。

    4 Maven Helper

    实用指数:★★★★★

    装逼指数:★★

    这是一款使用Maven管理项目的必装插件,主要用于分析项目jar依赖关系,可以快速找出冲突的jar包。

    5 Lombok

    实用指数:★★★

    装逼指数:★★★

    Lombok是一个充满争议的工具,大家可以结合它的优缺点谨慎选择。在项目有很多POJO类,每个POJO类有大量的getter/setter/toString代码,这些样板代码既没有技术含量,又影响着代码的美观,Lombok应运而生。

    如果一个项目中依赖了lombok,那么需要在idea中安装lombok插件,否则项目会报错。

    关于Lombok的常用注解如@Data@Setter@Getter等的使用方法大家可以上网搜索。

    6 JavaDoc

    实用指数:★★★★

    装逼指数:★★

    在项目中经常要求写代码注释,否则不能通过代码门禁,JavaDoc工具可以一键生成注释。

    插件安装成功后在菜单栏 code -> JavaDocs可以找到

    自动生成注释效果如下:

    7 .ignore

    实用指数:★★★★★

    装逼指数:★

    项目开发中通常会使用到git进行版本管理,在提交代码时经常有人将本地的不必要的文件提交到代码仓库中,使用.ignore插件可以很好解决这个问题。插件安装完成后会在项目中生成一个.ignore文件,编辑该文件忽略一些动态生成的文件,如class文件,maven的target目录等。

    8RainbowBrackets

    实用指数:★

    装逼指数:★★★★★

    彩虹括号,代码中有多个括号会显示不同的颜色。

    9 Activate-power-mode

    实用指数:★

    装逼指数:★★★★★

    在敲代码时有抖动酷炫的特效,非常适合给前端小姐姐表演特技。(坏笑)

    10 Grep Console

    实用指数:★★★★

    装逼指数:★★

    运行项目后在console(控制台)输出日志,通过配置不同日志级别的颜色,可以很明显的识别错误信息,便于项目调试。

    如果在线安装插件失败可以尝试离线安装,100%成功哦。微信搜索公众号:爱笑的架构师,关注后回复关键字:插件,即可获得所有的插件安装包。

    附:离线安装插件步骤

    第一步:

    第二步:选择下载好的插件包;

    第三步:重启idea即可生效。

    总结

    我把大学和工作中用的经典电子书库(包含数据结构、操作系统、C++/C、网络经典、前端编程经典、Java相关、程序员认知、职场发展)、面试找工作的资料汇总都打包放在这了,这套资源可不是一般那种网上找的资源,是伴随我从学生一路到职场,非常宝贵!

    已经打包好了,点击链接获取

    大家学会了吗?收藏等于白嫖,点赞才是真爱,雷小帅感谢大家~~~

    作者:雷小帅

    推荐一个Github 开源项目,『Java八股文』Java面试套路,领取 10G 免费学习资料,Java进阶学习,打破内卷拿大厂Offer,升职加薪!

    作者简介:

    ☕读过几年书:华中科技大学硕士毕业;
    😂浪过几个大厂:华为、网易、百度……
    😘一直坚信技术能改变世界,愿保持初心,加油技术人!

    微信搜索公众号【爱笑的架构师】,关注这个对技术有追求且有趣的打工人。

    展开全文
  • IntelliJ IDEA插件开发手册 IntelliJ IDEA插件开发手册 IntelliJ IDEA插件开发手册
  • 请教各位老师: IntelliJ IDEA 插件开发 :如何获取 IntelliJ IDEA 的文档提示工具窗口 和 提示文本, 如图:

    请教各位老师:
    IntelliJ IDEA 插件开发 :如何获取 IntelliJ IDEA 的文档提示工具窗口 和 提示文本,

    如图:

    文档提示工具窗口

    展开全文
  • IntelliJ IDEA插件开发教程

    千次阅读 2020-08-19 21:18:36
    IntelliJ IDEA插件开发教程 我们在使用Android Studio开发的时候都会使用一些插件,来方便我们的开发工作,提升工作效率。IntelliJ IDEA 可能有的人已经很熟悉,强大的开源IDE。Android Studio 就是基于IDEA社区...

    IntelliJ IDEA插件开发教程

    image.png

    我们在使用Android Studio开发的时候都会使用一些插件,来方便我们的开发工作,提升工作效率。IntelliJ IDEA 可能有的人已经很熟悉,强大的开源IDE。Android Studio 就是基于IDEA社区版开发的。下载安装后打开软件我们就会发现,IntelliJ IDEA的界面、菜单、状态栏以及Preference 和 安卓开发ide android studio 几乎是一模一样的。

       image.png

    IntelliJ IDEA 简称 IDEA,是 Jetbrains 公司旗下的一款 JAVA 开发工具,支持 Java、Scala、Groovy、kotlin 等语言的开发,同时具备支持目前主流的技术和框架,擅长于企业应用、移动应用和 Web 应用的开发,提供了丰富的功能,智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等。

    IntelliJ IDEA插件类型

    在介绍IDEA插件开发流程之前,先了解下idea插件有哪些类型及其作用。

    image.png

    从官方文档可以看出,idea开发的插件最常见的有5种类型。分别是

    1、UI主题

    UI主题使设计人员能够自定义内置IDE UI元素的外观。自定义UI主题可以:

    • 替代图标,
    • 更改图标和UI控件的颜色,
    • 更改UI控件的边框和插图,
    • 提供自定义编辑器方案,
    • 添加背景图像。

    可供下载的UI主题 说明创造的可能性。

    2、自定义语言支持

    自定义语言支持提供了使用特定编程语言的基本功能。包括:

    • 文件类型识别(File type recognition)
    • 词法分析(Lexical analysis)
    • 词法高亮显示(Syntax highlighting)
    • 格式化(Formatting)
    • 代码洞察和代码完成(Code insight and code completion)
    • 检查和快速修复(Inspections and quick-fixes)
    • 意图行动(Intention actions)

    详情点击:自定义语言支持插件开发

    3、框架集成(Framework Integration)

    框架集成由改进的代码洞察特性组成,这些特性是给定框架的典型特征,以及直接从IDE使用特定于框架的功能的选项。有时它还包括自定义语法或DSL的语言支持元素

    • 具体代码的洞察力(Specific code insight)
    • 直接访问特定于框架的功能(Direct access to framework-specific functionality)

    参考案例: Struts 2 plugin开发

    4、工具继承(Tool Integration)

    工具集成使直接从IDE操作第三方工具和组件成为可能,而无需切换上下文

    这就意味着:

    • 额外行动的实施(Implementation of additional actions)
    • 相关的UI组件(Related UI components)
    • 访问外部资源(Access to external resources)

    参考案例: Gerrit integration

    5、用户界面插件(User interface add-ons)

    此类别中的插件对IDE的标准用户界面应用各种更改. 一些新添加的组件是交互式的,并且提供了新的功能,而另一些则仅限于可视化修改.

     

    插件开发方式

    Mac IDEA配置阿里云国内镜像

    IDEA会自动装配IDEA版本的maven,所以只需要配置settings.xml就可以实现变更国内镜像。

     

    IDEA插件有两种开发方式:1、DevKit方式 2、Gradle方式

    一、DevKit方式

    Plugin DevKit_是一个捆绑的IntelliJ IDEA插件,用于使用IntelliJ IDEA为IntelliJ平台开发插件自己的构建系统. 它提供了自定义SDK类型和一组用于在IDE中构建插件的操作.早期的插件项目都是DevKit方式。

    image.png

    DevKit的plugin项目,项目工程的配置文件是imi文件。

    image.png

    Sandbox

    IntelliJ IDEA 插件以 Debug/Run 模式运行时是在 SandBox 中进行的,不会影响当前的 IntelliJ IDEA;但是同一台机器同时开发多个插件时默认使用的同一个 sandbox,即在创建 IntelliJ Platform SDK 时默认指定的 Sandbox Home.

    如果需要每个插件的开发环境是相互独立的,可以创建多个 IntelliJ Platform SDK,为 Sandbox Home 指定不同的目录 。

    image.png

    Run/Debug

    新建或修改运行/调试配置,选择使用的module后,可直接点击图标运行或调试。

    image.png

    Prepare Plugin For Deployment

    如果项目中没有任何依赖,打出来的插件包是jar包

    image.png

    如果项目中有依赖其他插件或Library,则打出来的插件包是zip文件

    image.png

    插件的配置文件是plugin.xml,是整个插件的核心,见Gradle方式中的plugin.xml说明。

    二、Gradle方式

    Gradle插件是构建IntelliJ插件的推荐解决方案.该插件负责处理插件项目的依赖性 - 基本IDE和插件可能依赖的其他插件.  它还提供了使用插件运行IDE并将插件发布到JetBrains插件存储库的任务.对于新项目,官方推荐Gradle方式。

    image.png

    Gradle的plugin项目,项目工程的配置文件是build.gradle文件

    image.png

    gradle插件源码及版本信息

    image.png

    兼容性

    image.png

    如果依赖的插件版本和intellij版本不兼容,编译则会报如下图错误

    image.png

    关于兼容性,官方也作了说明

    image.png

    例如koltin插件,可以去JetBrains Plugins Repository查询各版本及其兼容的IDE版本

    image.png

    image.png

    可以根据项目需要添加更多的配置

    image.png

    plugin.xml

    plugin.xml是整个项目的核心配置文件,一些Action、Extension组件需要在这里先进行注册和声明,和Android 开发的AndroidManifest.xml注册组件类似。

     

    <idea-plugin>
      <!-- 插件名称,别人在官方插件库搜索你的插件时使用的名称 -->
      <name>MyPlugin</name>
      <!-- 插件唯一id,唯一性标识,上传到官方仓库如果如果有重复的ID是不能提交成功的,所以推荐使用com.xxx.xxx的格式 插件不同版本之间不能更改,若没有指定,则与插件名称相同 -->
      <id>com.example.plugin.myplugin</id>
      <!-- 插件的描述 -->
      <description>my plugin description</description>
      <!-- 插件版本变更信息,支持HTML标签;
           将展示在 settings | Plugins 对话框和插件仓库的Web页面 -->
      <change-notes>Initial release of the plugin.</change-notes>
      <!-- 插件版本 -->
      <version>1.0</version>
      <!-- 供应商主页和email-->
      <vendor url="http://www.jetbrains.com" email="support@jetbrains.com" />
      <!-- 插件所依赖的其他插件的id -->
      <depends>MyFirstPlugin</depends>
    <!-- Targeting PhpStorm, so is dependent on the PHP plugin -->
    <depends>com.jetbrains.php</depends>
    <depends>com.intellij.modules.platform</depends>
      <!-- 插件兼容IDEA的最大和最小 build 号,两个属性可以任选一个或者同时使用
           官网详细介绍:http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html-->
      <idea-version since-build="3000" until-build="3999"/>
      <!-- application components -->
      <application-components>
        <component>
          <!-- 组件接口 -->
          <interface-class>com.foo.Component1Interface</interface-class>
          <!-- 组件的实现类 -->
          <implementation-class>com.foo.impl.Component1Impl</implementation-class>
        </component>
      </application-components>
      <!-- project components -->
      <project-components>
        <component>
          <!-- 接口和实现类相同 -->
          <interface-class>com.foo.Component2</interface-class>
        </component>
      </project-components>
      <!-- module components -->
      <module-components>
        <component>
          <interface-class>com.foo.Component3</interface-class>
        </component>
      </module-components>
      <!-- Actions -->
      <actions>
        ...
      </actions>
      <!-- 插件定义的扩展点,以供其他插件扩展该插件 -->
      <extensionPoints>
        ...
      </extensionPoints>
      <!-- 声明该插件对IDEA core或其他插件的扩展 -->
      <extensions xmlns="com.intellij">
        ...
      </extensions>
    </idea-plugin>

    Action

    概念

    Action 用于描述一个动作、行为,可以通过快捷键、点选的方式进行触发。一个 Action 是一个 class,是 AnAction 的子类,actionPerformed 方法在菜单Item或者标题栏按钮被选中的时候会被调用。

     

    Action 允许添加到右键菜单或者Toolbar菜单上面。Action也可以成组添加到具体的一个Group下面。

    创建action

    继承AnAction,并重写actionPerformed方法,此方法是action触发执行的入口。

    image.png

    注册action

    image.png

    • Action ID: action 唯一 id,推荐使用全类名
    • Class Name: 要被创建的 action class 名称
    • Name: menu item 的文本
    • Description: action 描述,toolbar 上按钮的提示文本,可选
    • Add to Group:选择新 action 要被添加到的 action group(Groups, Actions)以及相对其他 actions 的位置(Anchor),比如 EditMenu 就是顶部菜单栏的 Edit 菜单。
    • Keyboard Shortcuts:指定 action 的第一和第二快捷键

     

    Components

    插件组件是插件集成的基础概念,我们插件定义的每一个组件(component) 应该在配置文件中配置相关的接口(可选)和实现类。有三种组件:

    Components 类型

    Components 接口类型 描述
    Application Component IDEA启动时会初始化,IDEA生命周期中仅存在一个实例。
    Project Component IDEA 会为每一个 Project 实例创建一个 Project 级别的component
    Module Component IDEA 会为每一个 Project 的加载过的Module实例Module级别的component

    创建 Component

    Application Component

    public class TestApplication implements ApplicationComponent {
        public TestApplication() {
        }
        @Override
        public void initComponent() {
            // TODO: insert component initialization logic here
        }
        @Override
        public void disposeComponent() {
            // TODO: insert component disposal logic here
        }
        @Override
        @NotNull
        public String getComponentName() {
            return "TestApplication";
        }
    }

    Project Component

    public class TestProject implements ProjectComponent {
        public TestProject(Project project) {
        }
        @Override
        public void initComponent() {
            
        }
        @Override
        public void disposeComponent() {
            
        }
        @Override
        @NotNull
        public String getComponentName() {
            return "TestProject";
        }
        @Override
        public void projectOpened() {
            // called when project is opened
        }
        @Override
        public void projectClosed() {
            // called when project is being closed
        }
    }

    Module Component

    public class TestModule implements ModuleComponent {
        public TestModule(Module module) {
        }
        @Override
        public void initComponent() {
            // TODO: insert component initialization logic here
        }
        @Override
        public void disposeComponent() {
            // TODO: insert component disposal logic here
        }
        @Override
        @NotNull
        public String getComponentName() {
            return "TestModule";
        }
        @Override
        public void moduleAdded() {
            // Invoked when the module corresponding to this component instance has been completely
            // loaded and added to the project.
        }
    }

    注册 Components

    components 需要配置在 plugin.xml 中,并指定 interface 和 implementation,interface 类用于从其他组件中检索组件,implementation 类用于实例化组件。

    Application Component

    <application-components>
      <component>
        <implementation-class>com.example.test.TestApplication</implementation-class>
      </component>
    </application-components>

    Project Component

    <project-components>
        <component>
            <implementation-class>com.example.test.TestProject</implementation-class>
        </component>
    </project-components>

    Module Component

    <module-components>
      <component>
        <implementation-class>com.example.test.TestModule</implementation-class>
      </component>
    </module-components>

    注意:

    1. 一个 interface-class 不能有多个 implementation-class。
    2. 若组件没有创建 interface 类,而是直接实现了 ApplicationComponent 等接口,interface 和 implementation 可以指定为同一个类。
    3. 每一个组件都应该有一个唯一的名字,通过 getComponentName() 返回,推荐使用 <plugin_name>.<component_name> 格式。

    获取 Component 实例

    获取 Application Component

    通过 ApplicationManager获取

    //获取application容器中的组件
    TestApplication testApplication = ApplicationManager.getApplication().getComponent(TestApplication.class);

    获取project

    通过action获取

    DataContext dataContext = anActionEvent.getDataContext();
    // DataConstants 被标记为 @deprecated
    mProject = (Project)dataContext.getData(DataConstants.PROJECT);
    
    Project project = anActionEvent.getData(PlatformDataKeys.PROJECT);

    通过PsiElement获取

    /**
     * The common base interface for all elements of the PSI tree.
     * <p/>
     * Please see <a href="https://www.jetbrains.org/intellij/sdk/docs/basics/architectural_overview.html">IntelliJ Platform Architectural Overview</a>
     * for high-level overview.
     */
    public interface PsiElement extends UserDataHolder, Iconable {
      /**
       * The empty array of PSI elements which can be reused to avoid unnecessary allocations.
       */
      PsiElement[] EMPTY_ARRAY = new PsiElement[0];
    
      ArrayFactory<PsiElement> ARRAY_FACTORY = count -> count == 0 ? EMPTY_ARRAY : new PsiElement[count];
    
      /**
       * Returns the project to which the PSI element belongs.
       *
       * @return the project instance.
       * @throws PsiInvalidElementAccessException if this element is invalid
       */
      @NotNull
      @Contract(pure=true)
      Project getProject() throws PsiInvalidElementAccessException;
    }

    获取module

    通过project获取

    TestModule testModule = project.getComponent(TestModule.class);

    通过action获取

    DataContext dataContext = anActionEvent.getDataContext();
    // DataConstants 被标记为 @deprecated
    mModule =(Module)dataContext.getData(DataConstants.MODULE);
    
    Module module = anActionEvent.getData(LangDataKeys.MODULE);
    @Deprecated
    @SuppressWarnings({"JavadocReference"})
    public interface DataConstants {
      /**
       * Returns {@link com.intellij.openapi.project.Project}
       *
       * @deprecated use {@link PlatformDataKeys#PROJECT} instead
       */
      @Deprecated String PROJECT = CommonDataKeys.PROJECT.getName();
    
      /**
       * Returns {@link com.intellij.openapi.module.Module}
       *
       * @deprecated use {@link com.intellij.openapi.actionSystem.LangDataKeys#MODULE} instead
       */
      @Deprecated @NonNls String MODULE = "module";
    }

    Component 生命周期

    Component加载

    Application 级别的 components 在 IDEA 启动时加载,Project 和 Module 级别的 components 在项目启动时共同加载。

    一个组件加载过程:

    1. 创建:调用构造方法
    2. 初始化:调用 initComponent() 方法
    3. 如果是 Project 组件,会调用 projectOpened() 方法; 如果是 Module 组件,会依次调用 moduleAdded()projectOpened() 方法。

    ModuleComponent 的生命周期方法中比 ProjectComponent 多一个 moduleAdded(),用于通知 module 已经被添加到 project 中。

    如果 component 在加载时需要用到其他 component,我们只需在该 component 的构造方法的参数列表声明即可,在这种情况下,IntelliJ IDEA 会按正确的顺序实例化所依赖的 component。

    示例:

    public class MyComponent implements ApplicationComponent {
        private final MyOtherComponent otherComponent;
        public MyComponent(MyOtherComponent otherComponent) {
           this.otherComponent = otherComponent;
        }
        ...
    }

    Component 卸载

    一个组件卸载过程:

    1. 如果是 Project 或 Module 组件,调用 projectClosed()
    2. 接下来 disposeComponent() 将被调用

    持久化

    对于IDEA插件的一些配置,一般情况下都不会希望用户每次使用插件时都要配置一遍,所以 IntelliJ Platform 提供了一些 API,来做数据的持久化。

    PropertiesComponent

    对于简单的 key - value 数据结构,可以使用 PropertiesComponent,用于保存 application 和 project 级别的数据。用法如下:

    //获取 application 级别的 PropertiesComponent
    PropertiesComponent propertiesComponent = PropertiesComponent.getInstance();
    //获取 project 级别的 PropertiesComponent,指定相应的 project
    PropertiesComponent propertiesComponent = PropertiesComponent.getInstance(Project);
    // set & get
    propertiesComponent.setValue(name, value)
    propertiesComponent.getValue(name)

    所有的 PropertiesComponent设置的键值对共用同一个namespance,所以需要避免key冲突。

    PersistentStateComponent

    对于复杂的数据结构,可以使用 PersistentStateComponent,PersistentStateComponent 可以指定持久化的存储位置。

    • 需要提供一个 PersistentStateComponent 的实现类,T代表需要持久化的数据结构类型,然后重写 getState() 和 loadState() 方法。T可以是任意的类,或者是实现类自身。
    • 若需要指定存储位置,则在实现类上增加 @State 注解
    • 若不希望其中的某个字段被持久化,可以在该字段上增加 @Transient 注解
    @State(name = "PersistentStateComponentImpl", 
           storages = {
               @Storage(value = "PersistentStateComponentImpl.xml")
           })
    class PersistentStateComponentImpl implements PersistentStateComponent<State> {
        State myState;
        // 当组件被创建或 xml 文件被外部改变(比如git更新)时被调用
        public State getState() {
            return myState;
        }
        
        // 当 settings 被保存时,该方法会被调用并保存状态值。
        public void loadState(State state) {
            myState = state;
        }
    }
    class State {
        public State() {}
        
        // 支持基本的数据类型、Map、Collection、enum
        public String value;
        
        @Transient
        public String disableSave;
    }
    • 若是 application 级别的组件
      • 运行调试时 xml 文件的位置: ~/IdeaICxxxx/system/plugins-sandbox/config/options
      • 正式安装时 xml 文件的位置: ~/IdeaICxxxx/config/options
    • 若是 project 级别的组件
      • 默认为项目的 .idea/misc.xml
      • 若指定为 StoragePathMacros.WORKSPACE_FILE,则会被保存在 .idea/worksapce.xml

    注册持久化

    持久化组件可以声明为 Service,也可以声明为 Component,声明为 Component 则与前面介绍注册与获取的方法一致,声明为Service如下:

    获取方式为:

    <extensions defaultExtensionNs="com.intellij">
    <!-- application 级别-->
    <applicationService serviceImplementation="com.yuyh.finder.PersistentStateComponentImpl1"/>
    <!-- project 级别 -->
    <projectService serviceImplementation="com.yuyh.finder.PersistentStateComponentImpl2"/>
    </extensions>

    扩展以及扩展点

    Intellij 平台提供了允许一个插件与其他插件或者 IDE 交互的 extensions 以及 extension points 的概念。

    extensions

    如果你想要你的插件扩展其他插件或者 Intellij 平台,你必须声明一个或多个 extensions

    extension points

    如果你想要你的插件可以被其他插件使用,那么你必须在你的插件内声明一个或多个扩展点(extension points)。每个扩展点定义了允许访问这个点的类或者接口。

    注册 extensions 以及 extension points

    你可以在你的 plugin.xml 中的 <extensions> 和 <extensionPoints> 块中定义 extensions 以及 extension points。

        <extensions defaultExtensionNs="com.intellij">
            <checkinHandlerFactory implementation="org.example.untitled.CheckinHandlerFactory"/>
        </extensions>

    GUI

    GUI 是 IntelliJ IDEA 提供的一个自动生成 java 布局代码的工具,它使用 JDK 中的 Swing 控件来实现 UI 界面。

    image.png

    image.png

    image.png

    面板编辑完成之后,点击Toolbar工具条那里的编译按钮。编译完成后,GUI的代码会生成在 对应的 Java文件里面。

    image.png

    Gradle Task

    Gradle task 和 android studio的 类似,常用的也是打包、调试和发布task,只不过task 名不同。

    image.png

    更多说明和示例可见JetBrains/gradle-intellij-plugin

    buildPlugin

    buildPlugin  构建插件,常说的打包 插件包默认输出目录为build/distributions/插件名.zip

    image.png

    runIde

    runIde 调试运行

    现在双击runIde即可调出另外一个安装了这个插件的IDEA界面,然后可以看运行结果进行调试。 runIde还支持debug模式,不过运行时要右击选择:

    image.png

    如果setIdeDirectory设置为Android studio路径,则调试过程如下,会重新启动一个main(Android studio)

     

    publishPlugin

    publishPlugin 发布插件

    上传插件市场

    1、官方插件市场

    官方文档:http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/publishing_plugin.html

    image.png

    2、自定义个人/公司插件存储服务器

    image.png

       image.png

    Install

    如果要安装的插件非JetBrains官方插件市场发布的插件,则需要配置插件存储服务器地址,才能在Marketplace搜索到然后install。

    image.png

    搜索但还未安装时,右侧会显示updatePlugins.xml文件中配置的插件信息;从硬盘选择安装或已安装的插件,会显示plugin.xml文件中配置的插件信息。

    image.png

    最后

    到这里,一个IDE插件的的开发、配置、调试运行、发布、安装的基本流程就介绍完毕了。插件的应用非常广泛,可以应用所有基于IntelliJ Platform开发的IDE软件。如果想深入学习IDE插件开发,建议阅读官方文档。官方文档内容更加全面丰富,但是由于文档精炼、简洁,所以在学习过程中,很多地方需要我们去揣摩、整理和总结。

    展开全文
  • IntelliJ IDEA插件开发基础(中文).pdf
  • IntelliJ IDEA插件之FindBugs下载插件安装插件概述 下载插件 下载地址 安装插件 安装方式 概述 从IntelliJ IDEA中查找Java代码中的错误
  • Intellij IDEA 插件开发之自建插件仓库

    万次阅读 2016-11-27 11:07:03
    Intellij IDEA 有一个自己的官方的插件仓库,但是当我们的开发的 Intellij IDEA插件不能够对外公开时,我们就需要搭建自己的 Intellij IDEA插件仓库。前不久我们也尝试着使用Intellij IDEA自己开发一个插件...
  • IntelliJ IDEA插件 - ApiDebugger

    千次阅读 2018-01-28 23:13:23
    IntelliJ IDEA插件 - ApiDebugger ApiDebugger,是一个开源的接口调试IntelliJ IDEA插件,具有与IDEA一致的界面,无需切换程序即可完成网络API请求,让你的code更加沉浸式。 安装 Settings -> Plugins -> ...
  • Intellij IDEA 插件安装管理: 点击查看
  • IntelliJ IDEA插件之GsonFormat下载插件安装插件概述 下载插件 下载地址 安装插件 安装方式 概述 快速将JSON字符串转换为InnerClassEntity类 设置
  • IntelliJ IDEA插件之TranslationPlugin

    千次阅读 2019-11-25 21:00:19
    IntelliJ IDEA插件之TranslationPlugin下载地址安装插件概述使用如下图 下载地址 下载地址 安装插件 安装方式 概述 翻译他人代码或者源码中的英文 使用如下图 ...
  • IntelliJ idea插件开发环境配置

    千次阅读 2016-12-22 14:18:10
    IntelliJ idea插件开发环境配置,两步搞定
  • IntelliJ IDEA插件之CodeGlance

    千次阅读 2020-01-02 23:56:46
    IntelliJ IDEA插件之CodeGlance下载插件安装插件概述 下载插件 下载地址 安装插件 安装方式 概述 将类似于Sublime中的代码的微型地图嵌入到编辑器窗格中。使用您自定义的颜色对亮色和深色主题进行语法突出显示。 ...
  • intellij idea 插件备忘

    2015-09-26 21:39:37
    intellij idea 插件备忘 idea vim 同linux vi编辑器 Key Promoter 快捷键提示插件,可以提示快捷键和使用频率 unitTest 在指定的方法上按下shift + cmd + t 即可为这个方法生成单元测试代码模板。 Mybatis 插件
  • IntelliJ IDEA插件之String Manipulation下载地址安装插件概述 下载地址 下载地址 安装插件 安装方式 概述
  • IntelliJ IDEA插件之RestfulToolkit下载插件安装插件概述 下载插件 下载地址 安装插件 安装方式 概述 这款插件可以很方便的查找出对应的URL,另外还提供一个强大的功能,它会根据我们的controller提供的方法,自动...
  • Intellij Idea 插件从入门到深坑】让你能够熟悉Intellij Idea插件的开发,能够利用自己的所学,做出自己想要的东西。 由于Intellij Idea 插件 相关的资料比较匮乏,无论是从谷歌还是百度搜索,可用的资料都很少,...
  • IntelliJ IDEA 插件 ideaVim

    2018-08-28 09:58:00
    IntelliJ IDEA 插件 ideaVim IdeaVim: 用于基于IntelliJ平台的IDE的Vim仿真插件  IdeaVim支持许多Vim功能,包括普通/插入/可视模式,动作键,删除/更改,标记,寄存器,一些Ex命令,Vim regexp,...
  • IntelliJ IDEA插件结构

    千次阅读 2016-12-19 19:06:37
    IntelliJ IDEA插件结构 插件是扩展IDEA功能的唯一途径。一款插件使用IDEA或其他插件暴露的API实现它的功能。这篇文章关注插件系统的结构和插件的生命周期。文章中不会指出任何可能被插件使用的其他API接口。 文章中...
  • IntelliJ IDEA 插件安装

    2019-01-02 14:40:58
    首先,进入插件安装界面: Mac:IntelliJ IDEA -&gt; Preferences -&gt; Plugins; Windows:File -&...All plugins:显示 IntelliJ IDEA 支持的所有插件; Enabled:显示当前以前启用的插件; Disa...
  • IntelliJ IDEA插件之Grep Console下载地址安装插件概述 下载地址 下载地址 安装插件 安装方式 概述 自定义日志颜色,idea控制台可以彩色显示各种级别的log。 ...
  • 文章目录IntelliJ IDEA 插件 : MyBatis Log Plugin ,Mybatis 的日志辅助工具1、起源2、MyBatis Log Plugin3、安装并运行 IntelliJ IDEA 插件 : MyBatis Log Plugin ,Mybatis 的日志辅助工具 1、起源 Mybatis...
  • Intellij IDEA 插件-SearchByBaidu 前言 这个插件的名称叫SearchByBaidu,根据名字也能看出,是使用baidu来进行检索。虽然Google检索的效率更高一点,但是就中文的检索结果来说,baidu还是有用处。 注:在Intellij ...
  • IntelliJ IDEA插件之Power Mode II

    千次阅读 2020-01-01 18:20:38
    IntelliJ IDEA插件之Power Mode II下载地址安装插件概述使用如下图 下载地址 下载地址 安装插件 安装方式 概述 Power Mode II是写代码的时候体验狂拽酷炫的效果 使用如下图 ...
  • IntelliJ IDEA插件之Stackoverflow下载插件安装插件概述使用如下图 下载插件 下载地址 安装插件 安装方式 概述 Stack Overflow是一个程序设计领域的问答网站,隶属Stack Exchange Network。网站允许注册用户提出或...
  • IntelliJ IDEA插件之Free MyBatis plugin下载地址安装插件概述 下载地址 下载地址 安装插件 安装方式 概述 mapper接口与对应xml文件对应
  • IntelliJ IDEA插件之Background Image Plus +

    千次阅读 2020-01-01 18:37:31
    IntelliJ IDEA插件之Background Image Plus +下载地址安装插件概述 下载地址 下载地址 安装插件 安装方式 概述 IDEA 背景修改插件
  • IntelliJ IDEA插件之MyBatis Log Plugin下载地址安装插件概述 下载地址 下载地址 安装插件 安装方式 概述 将mybatis生成sql还原为原始整个sql。 打开控制台 控制台介绍 ...
  • Java开发必装的IntelliJ IDEA插件

    千次阅读 2019-03-02 16:00:46
    参考: Java开发必装的IntelliJ IDEA插件

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,325
精华内容 16,130
关键字:

intellijidea插件