# lx-plugin **Repository Path**: fengkuangdejava/lx-plugin ## Basic Information - **Project Name**: lx-plugin - **Description**: 工具小插件 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-08-21 - **Last Updated**: 2025-05-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 自定义个人助手idea插件 ### 背景 1.每次修改代码都得手动递增每个文件得版本号 并加上修改信息, 然后手动修改HUNDSUN_VERSION或者getVersion()方法。容易出错或者遗漏。 2.每次在代码修改处得复制修改信息,然后查出 // [修改信息] beg ,// [修改信息] end 然后,手动复制还容易出现不一致.导致可能根据修改信息找不到修改代码 3.对于项目,本地往往很多自行修改的部分,也存在很多的不想提交的修改.而且 是需要发邮件进行提交.不能依赖现有的svn工具.那么有没有一款工具,能自行标记 需要提交或者关联版本的文件,然后一键打包发送呢,并且生成好要提交的信息呢. 4.我们发送邮件提交后,往往存在很多版本,注释问题,例如:svn版本已经被更新,文件头部 修改信息部分和getVersion方法版本不一致,修改信息没有携带修改单号,把修改 单号当成了需求编号作为sql的文件名等等.这一系列的问题是否能够通过程序去检测, 提前修正. 5.开发完了,我还得去打开浏览器,访问mail,发邮件,然后访问效能平台填入信息,完成任务.可不可以直接在编辑器 内部,获取任务,提交任务等等. 6.对于有些文件,测试有问题,修改后,往往需要找到对应的class,重新打包发.有时候 还得保持路径,方便合并.文件多的话,搞个10多20分钟,极为耗时.那能否有个工具, 能够让我针对已经标记的文件,选择部分,然后已经复制最新class或者jsp,xml.按war路径,打包,导出呢? 7.有时候经常需要复制本地路径,或者添加路径/Sources/app,或者整个svnUrl开头发给同时总是需要复制路径到编辑器,然后手动替换,非常复制发送. 直接提供copy功能,且自动\转/发送. 8.针对打包的文件一键svn提交. 9.能够在开发时选中sql文本直接执行 ... ### 需求 综合以上问题,作者想写一款插件,完成以下功能. 1.可以自己设定本次的修改信息,然后一键生成修改信息,全文件递增版本号. 2.能够在自己鼠标的游标区域,一键插入// [修改信息] beg 或者 // [修改信息] end 3.能够标记文件,标记成修改,或者关联文件,然后一键添加,准备发送 4.能够自行在添加时检测文件的规范性和版本 5.能够一键发送邮件 6.能够和效能平台打通,查看任务列表和直接提交任务. 7.copy路径实现. 8.能够在开发时选中sql文本直接执行 ### 功能设计 1.配置页面 能够配置插件的一些参数 2.项目设置 添加 删除项目. 能够标记项目是否应用插件. 3.文件标记 取消标记 . 能够标记文件是否需要添加发送 4.添加文件 将已经标记的文件进行先校验再打包 5.校验文件 针对单个文件进行校验. 6.history,能够便捷的查看添加记录,发送记录和upload记录,后续扩展能够做一些重新打包,重发,或者回滚add等操作. 7.发送文件.针对打包的文件进行邮件发送 8.upload,针对打包的文件在idea进行效能平台提交任务 9.query,开放本地数据库的增删查改界面. 10.build & pack,更新标记文件的class,然后打包. 11.copy路径实现 12.针对打包的文件一键svn提交. 13.能够在开发时选中sql文本直接执行 ### 进度 功能点 | 进度 | 备注 ---|--- |--- 配置页面|100%| 已完成 项目设置|100%| 已完成 文件标记|100%|已完成 添加文件|100%|已完成 校验文件 |100%| 已完成 history |100%|已完成 发送文件|100%|已完成 upload|-|未有开放api,虽有方法破解,但是需另起项目,工作量偏大.暂无精力 query|100%|已完成 build & pack|- | 待扩展 copy |100%|已完成 svn提交 |-|未测试 sql执行 |100%|已完成-暂只支持oracle ### 技术说明 基础:jdk11,gradle,idea2021-2-2 依赖: h2, spring-jdbc,lombok,hu-tool,druid ### 目录说明 action idea的目录菜单类.菜单里的每一个菜单对应一个action(在plugin.xml配置显示位置).阅读代码从action开始 common 公共类 condition 菜单显示隐藏禁用的判定逻辑 config 全局配置 dao 数据操作定义 extention 底部工具栏 dialog 页面 pannel 页面 table 页面 channel 校验规则 pipeline 校验规则 rule 校验规则 context 校验规则 ### 配置说明 配置项都在SysConstant.java,如: checkSvnVersion("check.svnVersion.enable"), checkRequestIdAsSqlName("check.requestIdAsSqlName.enable"), checkHundSunJavaFile("check.hunSunJavaFile.enable"); 配置工具类是SystemPropertis.java 配置文件在${user.home}/.lx/applicaiton.properties ### 使用说明 前提: 1.安装idea版本2021-2-2 安装包http://82.156.26.52:7777/ideaIU-2021.2.2.exe 2.本地支持 svn cmd命令,安装svn时有个选项add to path 需要勾选,不支持重装一下就好. 3.安装lib目录下插件lx-plugin-***.jar 4.公司的邮箱不支持代收代发功能,可以用qq邮箱开启smtp功能, 设置收信规则,当标题中包含 ***关键字,则转发到 公司邮箱. 第一步:设置全局配置 ![image](./doc/1-1.jpg) ![image](./doc/1-2-1.jpg) ![image](./doc/1-3.jpg) 第二步:添加项目 ![image](./doc/2-1.jpg) ![image](./doc/2-2.jpg) 第三步: 修改代码后标记文件并添加 ![image](./doc/3-1.jpg) ![image](./doc/3-2.jpg) ![image](./doc/3-3.jpg) ![image](./doc/3-4.jpg) ![image](./doc/3-5.jpg) ![image](./doc/3-6.jpg) 第四步: 邮件或者svn提交 ![image](./doc/4-1.jpg) ![image](./doc/4-2.jpg) 邮件提交案例:发送邮件后,去公司邮箱,找到收到的邮件,转发. ![image](./doc/4-3.jpg) svn提交案例 ![image](./doc/4-4.jpg) 其它功能: sql直接调试功能,方便开发时偶尔查一下参数或者数据; ![image](./doc/5-1.jpg) ![image](./doc/5-2.jpg) ![image](./doc/5-3.jpg) ### 二次开发说明 环境要求: 本地支持svn的cmd命令 svn命令需要安装svn时勾选add to path 安装jdk11 git clone https://gitee.com/fengkuangdejava/lx-plugin.git 或者 git clone git@gitee.com:fengkuangdejava/lx-plugin.git idea打开项目,配置项目 ![image](./doc/Dingtalk_20230821105520.jpg) ![image](./doc/Dingtalk_20230821105423.jpg) -Dfile.encoding=UTF-8 -Dhttps.protocols=TLSv1.2,TLSv1.3 --add-exports java.base/jdk.internal.vm=ALL-UNNAMED 等待依赖下载完成,开始debug ### 打包命令 gradle clean build shadowJar ### 核心技术点说明 #### 提交前检测 1.svn版本检测 2.sql,upd文件名需要包含需求单号 3.路径中如果包含bank,或者为upd,sql文件则会校验代码文件路径是否包含修改信息中客户代码 4.Java文件-头部注释最后一行修改信息版本好和文件getVersion或者HUNDSUN_VERSION版本的版本号是否匹配 5.Java文件-头部注释最后一行修改信息是否包含修改单号. 6.Java文件-头部注释最后一行修改信息是否包含开发者名称 7.Java文件-头部注释文件名是否和Java文件一致。 7.普通sql文件-(非ora.sql,db2.sql)不能包含create table,drop table,create index,drop index语句 8.普通sql文件-(非ora.sql,db2.sql)打包前强制执行一遍.验证是否执行成功,支持在配置文件中设定执行时动态替换变量 例如:'%TA_CODE%'替换成'25' 9.Java文件-import包不允许* 例如:import aaa.bbb.* 10.Java文件-非bank目录代码,不允许import-bank目录下的类 ps:这些检测都可以通过配置项和配置文件关闭或者开启. #### 检测扩展 本项目检测规则支持开发者动态扩展. 定义模式链路 pipeline->channel->rule三级模式 然后初始化pipelineContext,放入链路后运行检测.每个层级都支持 开发者定义组装自己的规则和规则链路,只需修改PipelineFactory; 检测的统一异常处理在CheckExceptionHandler ### 其它说明 1.lib目录下,放了idea的破解插件ide-eval-resetter-2.3.5.jar,安装进入idea后,直接把jar拖入idea编辑器内. 2. query功能相当于内部调试,可以执行增删查改sql,修改查询本地的h2数据库,具体表结构见源码/resources/sql目录 3.本插件源码无任何内部涉密信息,数据放本地目录,放心使用. 4.目前仅适用于一个project一个module,微服务多模块等未测试. 5.关于发邮件,为什么要自动发邮件,作者本人经常发邮件时漏加,错发附件。公司对邮箱的限制很多。 pop3.imap.smtp都不支持。 有一个方案是通过一个非公司邮箱,发到一个非公司邮箱(可以自己发给自己),然后那个收件箱 设置转发规则,当主题包含***转发到公司邮箱。这样只需要,发送后,到公司邮箱转发即可。 出于保密性,最好设置为转发后删除邮件. 因为是自己设置发件箱,直接禁用了ssl,ssl处理对各大邮件服务商的适配,以及jdk各版本对ssl本身的 支持,需要花不少精力。 6.svn提交因未有权限 不好测试.所以未测试 7.目前仅实现了功能,应急用,很多地方,扩展性和模板配置化不强.例如: 提交信息格式是写死的.其实可以模板化 规则链路是代码里写死的,其实可以改成xml版动态配置. 所以适用性有限,见谅. 8.最新集成了开发数据库sql直接执行.支持编辑器内选中sql文件,右键->lx-tool->execute.方便reqsql开发 ### 展望 也许可以改写部分,变成eclipse插件,思路差不多,但是相对而言,jres的jdk版本较低,依赖语法版本等改造工作量不小.一些写法和工具类不支持的部分甚至需要自己实现. 也许可以基于该工具做一款仿postman的fixtool调试工具.支持历史 也许可以基于该工具提供更高级的检测,如语法,sql写法,代码中的密码明文,代码提示甚至ai 也许可以基于该工具结合外部统一公共接口控制如关闭p包提交. 也许可以基于h2做一些知识库的导入,方便开发检索.例如:sql,表面,字段,配置项,upd的关键字检索,辅助开发 目前单元测试比较不友好,也许可以基于该工具,写一个动态交易生成的工具,针对某个单独的方法,动态生成交易,方便单元测试. ...