作者:小傅哥
博客:https://bugstack.cn
❝沉淀、分享、成长,让自己和他人都能有所收获!😜
❞
不踩些坑,根本不是成熟的码农!
你觉得肯德基全家桶是什么?一家人一起吃的桶吗,就那么一点点?不是,肯德基全家桶说的是,鸡的全家桶!
听到这个故事就像有时候我因为需要解决某些问题去搜索
、折腾
、验证
、排除
的技术方案,因为方向不对,所以努力也就白费。只能一次次在众多的资料、文档、源码中一点点找到并组合出适合自己的问题场景的技术处理手段。
但这个过程有时候又是必须经历的,很少有时候能一次就找到正确的答案或者人,哪怕开始就找到了,也会再去排查下其他的资料,看看还有没有更好的。_是不,这就是你吧?_
我又要冲IDEA插件开发了!
在研究字节码插桩的相关技术后,🤔考虑着除了通常的用在代码上线后的非入侵式监控外,是不是也可以用于研发在开发阶段对系统接口的提取呢?
带着这个从脑袋中冒出的想法,想到如果要处理这个事情,最核心的问题就是开发一款IDEA插件+字节码插桩能力,在代码运行时对运行方法增强,提取相关的必要信息。别说案例还真做出来了,如下:
问题汇总:开发一个 IDEA 插件基本要涉及到的问题过程如下:
与 2019 IDEA 版本下的插件开发匹配
D:/Program Files (x86)/gradle/gradle-5.2.1/.gradle
User Gradle from =gradle-wrapper.properties
或者 Specified location
具体如下图:如果你是使用 IDEA New Project 默认的 IntelliJ Platform Plugin 方式,其实只关注1、2两步骤就可以了,但如果你需要 Gradle,那么需要注意3、4、5步骤的设置。当然通常也更推荐使用 Gradle 来搭建工程,这样你在需要一些额外的 Jar 包时候,只需要在 Gradle build.gradle
配置即可,而不是把需要的 Jar 包复制到工程的 lib 下。
在使用 Gradle 构建项目后,你会遇到几个问题;
ideaIC-2019.3.1.zip
。这个时候基本你会遇到一个崩溃的报错 Could not resolve all files for configuration ':detachedConfiguration1'.
咋办呢,如果你不嫌弃麻烦可以手动下载并SHA1加密后把下载的文件放到缓存文件夹中 .gradle\caches\modules-2\files-2.1
具体操作如下:.gradle
目录,进入 .gradle\caches\modules-2\files-2.1
目录,即为缓存文件的目录。这个目录是你的报错构建过程中的报错地址, Could not get resource D:\Program Files (x86)\gradle\gradle-5.2.1\.gradle\caches\modules-2\files-2.1\com.jetbrains.intellij.idea\ideaIC\2019.3.1
2dae8e50d4b0508cad2e680b53414f657954f390
目录名称(你的可能不是这样的),我去,这个应该是加密过的,但是是什么加密呢?,经过了解知道了这个是 SHA1
加密,且是对文件进行 SHA1
的加密生成的唯一字符串,但是windows上没有这个命令,在线 SHA1
也太麻烦了,还要上传文件,于是想到了Java的API,还有就是通过 git hash
命令行来实现。把我们的文件 ideaIC-2019.3.1.zip
先临时拷贝到这个目录。运行 sha1sum.exe ideaIC-2019.3.1.zip
命令,生成唯一的唯一字符串(用来校验文件的完整性),这样就拿到这个 2dae8e50d4b0508cad2e680b53414f657954f390
目录名2019.3.1
目录下,新建目录 2dae8e50d4b0508cad2e680b53414f657954f390
,将 ideaIC-2019.3.1.zip
移动进去即可。Java heap space
所以也可以 在IDEA项目根目录下,新建文件 gradle.properties
,添加如下内容,变更gradle Jvm参数 org.gradle.jvmargs=-Xmx2024m -XX:MaxPermSize=512m
别说还挺好用,竟然构建成功了。PluginGuide├── .gradle└── src ├── main │ └── java │ ├── HiClazz.java │ ├── MyDumbAwareAction.java │ ├── MySearchableConfigurable.java │ ├── MyToolWindowFactory.java │ └── TestUI.java └── resources ├── icons └── META-INF └── plugin.xml
public class HiClazz extends AnAction { @Override public void actionPerformed(AnActionEvent e) { Project project = e.getData(PlatformDataKeys.PROJECT); PsiFile psiFile = e.getData(CommonDataKeys.PSI_FILE); String classPath = psiFile.getVirtualFile().getPath(); String title = "Hello World!"; Messages.showMessageDialog(project, classPath, title, Messages.getInformationIcon()); }}
public class MyToolWindowFactory implements ToolWindowFactory { @Override public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) { toolWindow.setToHideOnEmptyContent(true); class MyPanel extends SimpleToolWindowPanel { public MyPanel(boolean vertical) { super(vertical); DefaultActionGroup group = new DefaultActionGroup(); group.add(new MyDumbAwareAction("Login1")); group.add(new MyDumbAwareAction("Login2")); group.add(new MyDumbAwareAction("Login3")); ActionToolbar toolbar = ActionManager.getInstance().createActionToolbar("ToolBar", group, false); setToolbar(toolbar.getComponent()); } } // 添加一个页 toolWindow.getContentManager().addContent(ContentFactory.SERVICE.getInstance().createContent(new MyPanel(false), "First", false), 0); }}
<extensions defaultExtensionNs="com.intellij"> <!-- Add your extensions here --> <toolWindow canCloseContents="true" anchor="bottom" id="SmartIM" factoryClass="MyToolWindowFactory"> </toolWindow> <!-- 在Setting中添加自定义配置模版 --> <projectConfigurable groupId="Other Settings" displayName="My Config" id="thief.id" instance="MySearchableConfigurable"/></extensions><actions> <!-- Add your actions here --> <action id="HiId_FileMenu" class="HiClazz" text="HiName"> <add-to-group group-id="FileMenu" anchor="first"/> <add-to-group group-id="MainMenu" anchor="first"/> <add-to-group group-id="EditMenu" anchor="first"/> <add-to-group group-id="ViewMenu" anchor="first"/> <add-to-group group-id="CodeMenu" anchor="first"/> <add-to-group group-id="AnalyzeMenu" anchor="first"/> <add-to-group group-id="RefactoringMenu" anchor="first"/> <add-to-group group-id="BuildMenu" anchor="first"/> <add-to-group group-id="RunMenu" anchor="first"/> <add-to-group group-id="ToolsMenu" anchor="first"/> <add-to-group group-id="WindowMenu" anchor="first"/> <add-to-group group-id="HelpMenu" anchor="first"/> </action> <action id="HiId_EditorPopupMenu" class="HiClazz" text="HiName"> <add-to-group group-id="EditorPopupMenu" anchor="first"/> </action> <action id="HiId_MainToolBar" class="HiClazz" text="HiName"> <add-to-group group-id="MainToolBar" anchor="first"/> </action></actions>
启动运行
::runIde
运行界面
运行效果
在 GitHub 上搜索 IDEA 插件开发,一共有44页内容,https://github.com/search?p=41&q=idea%E6%8F%92%E4%BB%B6&type=Repositories 涉及到自动化测试、工程脚手架、API生成、生成数据库的DAO类、一些常用工具,当然还有一些比较有意思的,比如:摸鱼看书、听郭德纲相声、微信聊天、局域网聊天、英语翻译等等。这里我给大家列举几个,开阔开阔思路。
compileflow Process
引擎是淘宝工作流 TBBPM
引擎之一,是专注于纯内存执行,无状态的流程引擎,通过将流程文件转换生成 java
代码编译执行,简洁高效。当前是阿里业务中台交易等多个核心系统的流程引擎。在阿里巴巴中台解决方案中广泛使用,支撑了导购、交易、履约、资金等多个业务场景。- END -
下方扫码关注 bugstack虫洞栈,与小傅哥一起学习成长、共同进步,做一个码场最贵Coder!
你好,我是小傅哥。一线互联网 java
工程师、架构师,开发过交易&营销、写过运营&活动、设计过中间件也倒腾过中继器、IO板卡。不只是写Java语言,也搞过C#、PHP,是一个技术活跃的折腾者。
2020年写了一本PDF 《重学Java设计模式》 ,全网下载量50万+,帮助很多同学成长,现已出书。同年 github 的两个项目, CodeGuide
、 itstack-demo-design
,持续霸榜 Trending,成为全球热门项目。
2021年上架一本小册 《SpringBoot 中间件设计和开发》 ,16个互联网中间件场景、30个工程,是全网唯一一次手把手教你造轮子、写中间件,因为这样的技术离P7最近、离架构师最近、离高薪资最近!
本文分享自微信公众号 - bugstack虫洞栈(bugstack)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
原网址: 访问
创建于: 2021-09-01 10:22:12
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
最新评论