我是如何把公司的发布系统搬到IDEA里的

我是如何把公司的发布系统搬到IDEA里的

不得不说JetBrains公司直的非常的牛B,每一个程序员都能在JetBrains的官方网站找到一款属于自己的开发工具。这些开发工具在工作中给我们带来了巨大的便利。各种各样的基础插件,第三方插件,真是谁用谁知道,快速的代码提示,语法检测,更重要的是提供了很多UI插件。曾几何时我也想过能自己开发一个IDEA的插件,终于经过一个多星期的摸索,我也能马马虎虎的开发一个插件出来!我相信看了这篇文章,你也能开发出一个自己的插件!

我要做什么?#

先介绍下,我们的部署环境流程是这样的

  • 测试
  • Beta
  • 灰度
  • 正式

那么我们正常的发布代码流程就是把开发节点合并某环境分支,然后利用部署系统部署!简单来说就两个流程,

1、合并分支

2、发布代码

那么针对这两个动作,我们就开发一个这样的插件,直接在IDEA里干完以上所有的事情。

安装环境#

网上有很多教程,大多都是千篇一律,互相抄袭!官方也有教程,但是官方那文档,反正我是看不懂!就用我们当前用的IDEA即可,

我是如何把公司的发布系统搬到IDEA里的

New->Project、选择图上画的三个即可,Next.接下来填写基本信息、包名等。然后等着构建Gradle项目吧。

构建完了,一定要重新配置下SDK

我是如何把公司的发布系统搬到IDEA里的

构建一个插件SDK,就按着步骤点即可,因为我们要用插件的SDK来开发插件,原生的SDK满足不了我们!

有点慢的同学可以配置下两个参数,这我也是从网上看到的,

  • 在~/.gradle/gradle.properties这个文件里追回org.gradle.daemon=true, 没有文件,创建一个即可。
  • 修改build.gradlerepositories { mavenLocal() // 加上这个地址 maven { url "https://maven.aliyun.com/nexus/content/groups/public/" } }

build.gradle#

大致介绍下这个文件,类型Maven的POM文件,管理项目的配置。关注几个重要的地方,其他不影响开发流程。大家可以对比下自己的初始项目。

//项目依赖 我加载了 hutool/okttp/lombokdependencies { implementation 'cn.hutool:hutool-all:5.7.14' implementation "com.squareup.okhttp3:okhttp:3.3.1" compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.20' annotationProcessor group: 'org.projectlombok', name: 'lombok', version: '1.18.20' testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'}//更新日志,会显示在插件介绍里。patchPluginXml { changeNotes = """ <ul> 1.0.0 <li>支持发布代码</li> <li>支持执行任务</li> </ul> """}

plugin.xml#

这个是配置插件功能的地方,有点类似Spring管理Bean的Xml文件!自己打开看即可。后面实战的时候会具体介绍。正常一个初始的插件项目类似下面这样!

我是如何把公司的发布系统搬到IDEA里的

实战#

这次我要做这样的一个插件!

我是如何把公司的发布系统搬到IDEA里的

因为我们的发布系统需要登录,所以我加了一个授权Token的操作,也就是拿到Token放到缓存。

有人说这不多此一举?登录系统发布下完事了!但在我看来,事情的结果并不重要,重要的是过程!

三个动作#

首先,我们就要鉴权,拿到Token保存到缓存时,然后,选择节点发布任务到对应的环境,最后再审核刚提交的任务。那么拆分下步骤如下!

1、授权Token

我是如何把公司的发布系统搬到IDEA里的

2、发布代码

我是如何把公司的发布系统搬到IDEA里的

3、审核代码

我是如何把公司的发布系统搬到IDEA里的

我相信程序员都对网页三剑客多多少少都有点了解,网页的基本构建,或者App页面的基本构成,那么IDEA的插件也类似设计思想,只不过语言换了,实现过程不一样!

Java写GUI程序,我们要了解Java的基本工具类Swing,它是为Java设计的一个GUI工具包。它提供了很多基础的组件:比如,文本框,按钮,分隔窗格和表等。

界面编码#

SDK里DialogWrapper这个类给我们提供一个标准的页面组件框架,我们实现这个类,大部分情况下我们实现这个类的一些方法即可。上面我们的组件几乎都是基于这个类,不同的是只要实现不同组件即可!

编写界面#

/** * @author Savey * @date 2021/10/19 21:50 */public class LoginFormDialog extends DialogWrapper { private final Project project; /** * 文本框 */ private final JTextField userText = new JTextField(20); /** * 密码框 */ private final JPasswordField passwordText = new JPasswordField(20); public LoginFormDialog(@Nullable Project project) { super(project); this.project = project; setTitle("授权登录"); setSize(350, 200); init(); } /** * 核心方法、创建中间部分的UI面板、Jpanel 可以认为DIV 盒子模型 */ @Override protected @NotNull JComponent createCenterPanel() { final JPanel panel = new JPanel(); //缓存记录 PropertiesComponent cache = project.getService(PropertiesComponent.class); /* 布局部分我们这边不多做介绍 */ panel.setLayout(null); // 创建 JLabel JLabel userLabel = new JLabel("Account :"); /* 这个方法定义了组件的位置。 */ userLabel.setBounds(40,30,80,25); panel.add(userLabel); /* * 创建文本域用于用户输入 */ userText.setBounds(140,30,165,25); userText.setText(cache.getValue("userName")); panel.add(userText); // 输入密码的文本域 JLabel passwordLabel = new JLabel("Password:"); passwordLabel.setBounds(40,60,80,25); panel.add(passwordLabel); /* * 这个类似用于输入的文本域 */ passwordText.setBounds(140,60,165,25); passwordText.setText(cache.getValue("password")); panel.add(passwordText); return panel; } @Override protected void doOKAction() { //这里点击 OK 按钮时动作,这里我们即将调用API获取TOKEN,放入缓存! //表单验证。。。。。 //这里和写普通Java代码一样,创建Service,调用方法。 //操作UI }

其实写这个界面我也是写了很久,参考了很多资料,主要参考W3C的教学,大致就这么个写法!有点啰嗦!

其中遇到写的难的就是 Table!调试了好久~~~

创建动作#

接下来、再来创建一个动作,这个动作使得授权弹框在当前的IDEA弹出来!

New -> Plugin DevKit ->Action->OK

我是如何把公司的发布系统搬到IDEA里的

点击OK后, IDEA自动的在 Plugin.xml里会生成以下代码。

<actions> <action popup="true" class="cn.qmai.idea.action.LoginDialogAction" text="授权Token" description="登陆Opms" id="loginDialogAction" /><actions/>

一个<action>标签表示一个Action动作。

/** * @author Savey * @date 2021/10/19 18:10 */public class LoginDialogAction extends AnAction { @Override public void actionPerformed(@NotNull AnActionEvent e) { //当前项目,IDEA是一个应用,一个应用可以打开多个项目(Project),Project对象即对应当前打开的项目。 Project project = e.getProject(); assert project != null; // LoginFormDialog 实例 DialogWrapper formDialogIns = new LoginDialogAction(project); //显示界面 formDialogIns.show(); }}

把动作放到对应的菜单上#

<actions> <action popup="true" class="cn.qmai.idea.action.LoginDialogAction" text="授权Token" description="登陆Opms" id="loginDialogAction" /> //这里我建立了一个Group 我把Action都放到我这个Group里,然后把这个Group放到 ToolsMenu 上// <group popup="true" id="qmOmpsActionGroup" text="Opms助手" icon="QmOpmsIcons.QmOpmsMenuActions"> <reference ref="loginDialogAction" /> <add-to-group group-id="ToolsMenu" anchor="last" /> </group></actions>

<Group>标签见名思意是一组的意思,就是一组按钮、一组动作!显然我就把<action>标签放到里面。和Spring的Bean.xml类似!

<add-to-group>标签是把当前的标签放到指定的Group上,我这里放到了ToolsMenu(IDEA的Toosl)上了,(至于系统其他的Group句子在官方是有介绍的,用到什么再看什么吧!),当然你也可以指定自定义的<action> 或者 <group>的id。

另外你也可能为每个Action添加快捷键、

<actions> <action popup="true" id="publishProject" class="cn.qmai.idea.action.PublishProjectAction" text="发布代码" description="发布代码"> <keyboard-shortcut keymap="$default" first-keystroke="shift ctrl I"/> </action></actions>

标签<keyboard-shortcut>添加热键,有可能会和系统冲突,可以到KeyMap里修改!

启动#

这个和IDEA上的用法一样,点击RUN即可,会打开一个内置的IDEA用于调试!DEBUG代码和普通IDEA用法一样,没什么区别、

代码目录#

我是如何把公司的发布系统搬到IDEA里的

还有很多知识点没有放出来,不过这些东西完全够写一个简单的插件了,有兴趣的同学可以一起交流!由于代码里集成了很多私密的东西,源码就不放出来了!

原文链接:https://www.cnblogs.com/m78-seven/p/15481969.html

作者:乌托拉赛文

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年9月9日 上午9:42
下一篇 2022年9月9日 上午9:44

相关推荐

  • 好用的幼教机构系统推荐(好用的幼教机构系统推荐哪个)

    “幼儿园管理系统”是指运用计算机软件技术,结合幼儿园的工作与管理特点,开发形成的一种专用软件。它应具备管理软件的所有基本要素,同时也必须体现幼教行业的特殊功能特点。 校宇宙管理系统…

    科研百科 2022年9月24日
    290
  • 项目管理 project

    项目管理 Project: 实现目标的过程 项目管理 project 是一种组织管理技能,用于计划,执行和控制项目进度,质量,成本和风险。在现代商业环境中,项目管理已经成为一种必要…

    科研百科 2024年7月27日
    61
  • pccad项目管理系统

    PCCAD项目管理系统 PCCAD项目管理系统是一款功能强大的软件,可以帮助建筑设计师,建筑师,工程师和其他建筑专业人士更高效地管理项目。该软件提供了许多功能,如项目计划,进度跟踪…

    科研百科 2024年12月12日
    6
  • 教师科研课题申报范例(教科研课题申报表)

    教科研课题申报表教科研课题申报表显示教学在全体教师工作中的重要地位,利用了教学活动中新的教学策略,为学生开展了专题研讨,旨在提高学生的教学技能和团队合作能力,助力培养出身心健康、品…

    科研百科 2024年9月26日
    28
  • 项目进度在线管理软件

    项目进度在线管理软件 随着数字化时代的到来,项目管理也逐渐变得越来越数字化。在线管理软件已经成为了许多项目管理人员的首选,因为它们能够提供实时的数据收集和跟踪,帮助企业更好地管理项…

    科研百科 2024年8月20日
    45
  • 做进度计划软件

    做进度计划软件 进度计划软件是一种有用的工具,可以帮助人们有效地组织和管理项目或任务。通过使用这种软件,我们可以轻松地创建、跟踪和审查进度,确保我们在正确的时间完成工作。 做进度计…

    科研百科 2024年8月23日
    31
  • 智慧教室录播系统-录播教室智慧录播软件(智慧录播教室功能介绍)

    智能教室录播系统,为用户提供一套数字化校园应用的精品课程自动录播系统。 无论是从前端视频采集设备,音频采集设备, 到后端图像,音频和数据处理设备,控制设备,系统都遵循“用户体验至上…

    2022年6月5日
    526
  • 如何查看科研项目经费

    如何查看科研项目经费 科研项目经费是科研活动的重要组成部分,用于支持实验室设备,人员费用,研究材料采购和其他相关支出。查看科研项目经费的使用情况对于科研活动的顺利进行至关重要。本文…

    科研百科 2025年2月26日
    1
  • 软件开发工程师的岗位职责有哪些?怎么考证?2022报考条件一览(软件开发工程师主要职责)

    软件开发工程师的岗位职责有哪些?怎么考证?2022报考条件一览! 软件开发工程师顾名思义就是利用计算机知识和自己的专业能力,在一定条件下完成软件开发工作的职业。软件开发工程师属于计…

    科研百科 2023年5月5日
    281
  • 运动保健 7款强身健体的运动(运动保健 7款强身健体的运动有哪些)

    现在的生活节奏,导致很多年轻人减少了运动次数,也有直接放弃运动,但是只有经常运动才能保证身体的健康,今天小编向大家推荐7款运动,帮助大家在这个夏天强身健体,一起来看看吧。 运动保健…

    科研百科 2024年4月19日
    71