游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

把阿里云原生应用脚手架,搬到IntelliJIDEA中使用!

  作者:小傅哥
  博客:https:bugstack。cn
  沉淀、分享、成长,让自己和他人都能有所收获!
  Spring有一个脚手架https:start。spring。io阿里云也有一个脚手架https:start。aliyun。com但这些脚手架都是在网页端的,虽然也能在IntelliJIDEA进行使用,但总是不太方便。为此我决定,基于IntelliJIDEA的插件开发技术,扩展创建工程向导步骤,开发一个我用起来方便的工程脚手架。行动是产生结果的唯一方式!一、前言
  研发,要避免自嗨!
  你做这个东西的价值是什么?有竞品调研吗?能赋能业务吗?那不已经有同类的了,你为什么还自己造轮子?
  你是不是也会被问到这样的问题,甚至可能还有些头疼。但做的时候挺嗨,研究技术嘛,还落地了,多刺激。不过要说价值,好像一时半会还体现不出来,能不能赋能业务就不更不一定了。
  可谁又能保证以后不能呢,技术的点是一个个攻克尝试的才有机会再深度学习后把这些内容连成一片,就像单说水、单说沙子、单说泥巴,好像并没有啥用,但把它们凑到一块再给把火,就烧成了砖,砖就码成了墙,墙就盖成房。二、需求目的
  我们这一章节把freemarker能力与IDEAPlugin插件能力结合,开发一个DDD脚手架IDEA插件,可能你会想为什么要把脚手架开发到插件里呢?还有不是已经有了成型的脚手架可以用吗?
  首先我们目前看到的脚手架基本都是网页版的,也就是一次性创建工程使用,不过在我们实际使用的时候,还希望在工程创建过程中把数据库、ES、Redis等生成对应的ORM代码,减少开发工作量。并且在使用的工程骨架的过程中,还希望可以随着开发需要再次补充新的功能进去,这个时候网页版的脚手架都不能很好的支持了。此外一些大厂都会自己的技术体系,完全是使用市面的脚手架基本很难满足自身的需求,所以就需要有一个符合自己场景的脚手架了。
  那么,我们本章节就把脚手架的开发放到IDEA插件开发中,一方面学习脚手架的建设,另外一方面学习如何改变工程向导,创建出自己需要的DDD结构脚手架。三、案例开发1。工程结构guideideapluginscaffolding。gradlesrcmainjavacn。bugstack。guide。idea。plugindomainmodelProjectConfigVO。javaserviceimplProjectGeneratorImpl。javaAbstractProjectGenerator。javaFreemarkerConfiguration。javaIProjectGenerator。javafactoryTemplateFactory。javainfrastructureDataSetting。javaDataState。javaICONS。javaMsgBundle。javamoduleDDDModuleBuilder。javaDDDModuleConfigStep。javauiProjectConfigUI。javaProjectConfigUI。formresourcesMETAINFplugin。xmltemplatepom。ftlyml。ftlbuild。gradlegradle。properties
  公众号:bugstack虫洞栈回复:idea即可下载工程源码
  在此IDEA插件工程中,主要分为5块区域:domain:领域层,提供创建DDD模板工程的服务,其实这部分主要使用的就是freemarkerfactory:工厂层,提供工程创建模板,这一层的作用就是我们在IDEA中创建新工程的时候,可以添加上我们自己的内容,也就是创建出我们定义好的DDD工程结构。infrastructure:基础层,提供数据存放、图片加载、信息映射这些功能。module:模块层,提供DDD模板工程的创建具体操作和步骤,也就是说我们创建工程的时候是一步步选择的,你可以按需添加自己的步骤页面,允许用户选择和添加自己需要的内容。比如你需要连库、选择表、添加工程所需要的技术栈等ui:界面层,提供Swing开发的UI界面,用于用户图形化选择和创建。2。UI工程配置窗体
  publicclassProjectConfigUI{privateJPanelmainPanel;privateJTextFieldgroupIdField;privateJTextFieldartifactIdField;privateJTextFieldversionField;privateJTextFieldpackageField;}使用SwingUIDesigner创建一个配置工厂信息的UI窗体,通过这样的方式创建可以直接拖拽。在这个UI窗体中我们主要需要;roupId、artifactId、version、package3。配置工程步骤创建3。1数据存放
  cn。bugstack。guide。idea。plugin。infrastructure。DataSettingState(nameDataSetting,storagesStorage(plugin。xml))publicclassDataSettingimplementsPersistentStateComponentDataState{privateDataStatestatenewDataState();publicstaticDataSettinggetInstance(){returnServiceManager。getService(DataSetting。class);}NullableOverridepublicDataStategetState(){returnstate;}OverridepublicvoidloadState(NotNullDataStatestate){this。statestate;}publicProjectConfigVOgetProjectConfig(){returnstate。getProjectConfigVO();}}在基础层提供数据存放的服务,把创建工程的配置信息存放到服务中,这样比较方便设置和获取。3。2扩展步骤
  cn。bugstack。guide。idea。plugin。module。DDDModuleConfigSteppublicclassDDDModuleConfigStepextendsModuleWizardStep{privateProjectConfigUIprojectConfigUI;publicDDDModuleConfigStep(ProjectConfigUIprojectConfigUI){this。projectConfigUIprojectConfigUI;}OverridepublicJComponentgetComponent(){returnprojectConfigUI。getComponent();}Overridepublicbooleanvalidate()throwsConfigurationException{获取配置信息,写入到DataSettingProjectConfigVOprojectConfigDataSetting。getInstance()。getProjectConfig();projectConfig。setgroupId(projectConfigUI。getGroupIdField()。getText());projectConfig。setartifactId(projectConfigUI。getArtifactIdField()。getText());projectConfig。setversion(projectConfigUI。getVersionField()。getText());projectConfig。setpackage(projectConfigUI。getPackageField()。getText());returnsuper。validate();}}继承ModuleWizardStep开发一个自己需要的步骤,这个步骤就会出现到我们创建新的工程中。同时在重写的validate方法中,把从工程配置UI窗体中获取到信息,写入到数据配置文件中。3。3配置步骤
  cn。bugstack。guide。idea。plugin。module。DDDModuleBuilderpublicclassDDDModuleBuilderextendsModuleBuilder{privateIProjectGeneratorprojectGeneratornewProjectGeneratorImpl();OverridepublicIcongetNodeIcon(){returnICONS。SPRINGBOOT;}重写builderId挂载自定义模板NullableOverridepublicStringgetBuilderId(){returngetClass()。getName();}OverridepublicModuleWizardStep〔〕createWizardSteps(NotNullWizardContextwizardContext,NotNullModulesProvidermodulesProvider){添加工程配置步骤,可以自己定义需要的步骤,如果有多个可以依次添加DDDModuleConfigStepmoduleConfigStepnewDDDModuleConfigStep(newProjectConfigUI());returnnewModuleWizardStep〔〕{moduleConfigStep};}}在createWizardSteps方法中,把我们已经创建好的DDDModuleConfigStep添加工程配置步骤,可以自己定义需要的步骤,如果有多个可以依次添加。同时需要注意,只有重写了getBuilderId()方法后,你新增加的向导步骤才能生效。4。开发脚手架服务
  cn。bugstack。guide。idea。plugin。domain。service。AbstractProjectGenerator
  publicabstractclassAbstractProjectGeneratorextendsFreemarkerConfigurationimplementsIProjectGenerator{OverridepublicvoiddoGenerator(Projectproject,StringentryPath,ProjectConfigVOprojectConfig){1。创建工程主POM文件generateProjectPOM(project,entryPath,projectConfig);2。创建四层架构generateProjectDDD(project,entryPath,projectConfig);3。创建ApplicationgenerateApplication(project,entryPath,projectConfig);4。创建YmlgenerateYml(project,entryPath,projectConfig);5。创建CommongenerateCommon(project,entryPath,projectConfig);}}在domain领域层添加用于创建脚手架框架的FreeMarker服务,它是一款模板引擎:即一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。FreeMarker在线手册:http:freemarker。foofun。cn按照DDD工程结构,分层包括:application、domain、infrastructure、interfaces,那么我们把这些创建过程抽象到模板方法中,具体交给子类来创建。5。调用脚手架服务
  cn。bugstack。guide。idea。plugin。module。DDDModuleBuilderpublicclassDDDModuleBuilderextendsModuleBuilder{privateIProjectGeneratorprojectGeneratornewProjectGeneratorImpl();OverridepublicIcongetNodeIcon(){returnICONS。SPRINGBOOT;}OverridepublicvoidsetupRootModel(NotNullModifiableRootModelrootModel)throwsConfigurationException{设置JDKif(null!this。myJdk){rootModel。setSdk(this。myJdk);}else{rootModel。inheritSdk();}生成工程路径StringpathFileUtil。toSystemIndependentName(Objects。requireNonNull(getContentEntryPath()));newFile(path)。mkdirs();VirtualFilevirtualFileLocalFileSystem。getInstance()。refreshAndFindFileByPath(path);rootModel。addContentEntry(virtualFile);ProjectprojectrootModel。getProject();创建工程结构Runnabler()newWriteCommandActionVirtualFile(project){Overrideprotectedvoidrun(NotNullResultVirtualFileresult)throwsThrowable{projectGenerator。doGenerator(project,getContentEntryPath(),DataSetting。getInstance()。getProjectConfig());}}。execute();}}在DDDModuleBuildersetupRootModel中,添加创建DDD工程框架的服务,projectGenerator。doGenerator(project,getContentEntryPath(),DataSetting。getInstance()。getProjectConfig());另外这里需要用到IDEA提供的线程调用方法,newWriteCommandAction才能正常创建。6。配置模板工程6。1模板工厂
  cn。bugstack。guide。idea。plugin。factory。TemplateFactorypublicclassTemplateFactoryextendsProjectTemplatesFactory{NotNullOverridepublicString〔〕getGroups(){returnnewString〔〕{DDD脚手架};}OverridepublicIcongetGroupIcon(Stringgroup){returnICONS。DDD;}NotNullOverridepublicProjectTemplate〔〕createTemplates(NullableStringgroup,WizardContextcontext){returnnewProjectTemplate〔〕{newBuilderBasedTemplate(newDDDModuleBuilder())};}}模板工厂的核心在于把我们用于创建DDD的步骤添加createTemplates方法中,这样算把整个创建自定义脚手架工程的链路就串联完成了。6。2文件配置
  plugin。xmlideapluginidcn。bugstack。guide。idea。plugin。guideideapluginscaffoldingidnameScaffoldingnamevendoremail184172133qq。comurlhttps:bugstack。cn小傅哥vendor!pleaseseehttp:www。jetbrains。orgintellijsdkdocsbasicsgettingstartedplugincompatibility。htmlonhowtotargetdifferentproductsdependscom。intellij。modules。platformdependsextensionsdefaultExtensionNscom。intellijprojectTemplatesFactoryimplementationcn。bugstack。guide。idea。plugin。factory。TemplateFactoryextensionsideaplugin接下来还需要把我们创建的工程模板以及数据服务配置到plugin。xml中,这样在插件启动的时候就可以把我们自己插件启动起来了。四、测试验证点击Plugin启动IDEA插件,之后创建工程如下:
  快拿去试试吧,启动插件,点击创建工程,傻瓜式点击,就可以创建出一个DDD工程结构了。五、总结学习使用IDEAPlugin开发技术,改变创建工程向导,添加自己需要的工程创建模板,这样就可以创建出一个DDD脚手架工程骨架了,接下来你还可以结合自己实际的业务场景添加自己需要的一些技术栈到脚手架中。如果你愿意尝试可以在工程创建中链接到数据库,把数据库中对应的表生成Java代码,这样一些简单的配置、查询、映射,就不用自己动手写了。在开发DDD脚手架的源码中还有一些细节过程,包括图标的展示、文案的信息、Freemarker的使用细节,这些你都可以在源码中学习并调试验证。

光腿神器火到欧洲订单排到明年5月客户提出新要求往年冬天,很多女性都会选择穿上保暖连裤袜这种光腿神器,来抵御严寒。而今年,这款保暖神器在欧洲市场也迎来了抢购潮。在浙江诸暨,不少保暖连裤袜生产企业都在加班加点赶订单,等待交货的……最舒服的男女关系,大概是这样的我全部的野心,不过自由一生文:小月亮排版:月亮巷最舒服的男女关系是怎么样的?有人说:是不搪塞,不敷衍,有争吵,却从未冷战。有人说:是事事有回应,件件有着……守护你爱情的天(原创)致郸城一高邢月娥秋雨撒下思念枫叶染红爱恋孤独的相望多年模糊你现实的模样可心中的爱情忘却时间迸发熊熊火焰用力拴住了时光只想再看你一……十滴水是藿香正气水吗?藿香正气水与十滴水的区别藿香正气水和十滴水是夏季防暑祛热解暑的药物,但是有人在使用过程中以为藿香正气水就是十滴水。那么,十滴水是藿香正气水吗?藿香正气水与十滴水的区别有哪些?十滴水是藿香正气水吗……汗蒸有什么好处吗什么时候不合适汗蒸汗蒸大家应该都很熟悉,汗蒸是现在很流行的一种娱乐方式,汗蒸深受大多数人喜欢,有很好的保健养生作用,但是不是什么时候都可以去汗蒸的。汗蒸有什么好处吗出汗是人体排泄和调节体温……肺气肿能抽烟吗?肺气肿能喝酒吗?得了肺气肿是比较痛苦的病,咳嗽不停,下面5号网的小编为你们介绍肺气肿能抽烟吗?肺气肿能喝酒吗?肺气肿能抽烟吗肺气肿患者绝对不能抽烟。8090的肺气肿是抽烟造成的。呼……海底铁树油效果好吗?海底铁树油效果实测海底铁树油被很多人推荐,但是很多人还是觉得不太相信,毕竟这个药的治病范畴还是挺广泛的,那么这款药到底表现如何呢,下面介绍海底铁树油效果好吗?海底铁树油效果实测。海底铁树油效果好……优能洗眼液怎么样优能洗眼液的副作用visine优能洗眼液也是洗眼液产品中的销量前列的产品,此款产品自带一副小七的洗眼杯,可简单方便的随时随地的帮助你完成洗眼的任务,下面我们就一起来看看大家对于visine优能洗……告别2022,最值得做的10件小事2022年将要过去,这一年,我们有收获,也有遗憾。不妨用这10件小事,与2022说再见,一起迎接即将到来的崭新一年。1总结一年得失回看自己年初许下的心愿,总结这一年……电商一周苏宁结盟美团,罗永浩挑战李佳琦,拼多多走进非洲联商网文一过去一周(2022。10。1710。23),电商领域发生了哪些事儿?罗永浩与李佳琦必有一战?一年一度的双11即将开启。在薇娅、雪梨纷纷折戟之下,直播……共轭亚油酸价格共轭亚油酸贵不贵共轭亚油酸在减肥上可以说是效果非常不错的,很多人都会回购,下面5号网的小编为你们介绍共轭亚油酸价格共轭亚油酸贵不贵。共轭亚油酸价格共轭亚油酸的价位大概在100元到200元……金嗓子喉宝成分金嗓子喉宝纯中草药金嗓子喉宝是大家比较熟悉的一款药品了,喉咙不舒服吃这个非常有效,下面5号网的小编为你们介绍金嗓子喉宝成分,金嗓子喉宝纯中草药。金嗓子喉宝成分金嗓子喉片主要成分是薄荷脑、金……
洗眼液真的能洗出眼睛里的脏东西吗洗眼液洗出来的白色漂浮物是什听说使用洗眼液可以把眼睛里的脏东西给洗出来,那洗眼液洗出来的真的是脏东西吗,用洗眼液洗出来的白色漂浮物又是什么?洗眼液真的能洗出眼睛里的脏东西吗洗眼液是将液体通过和角膜、……炼金术士降临,游戏显卡市场开启三国杀模式蓝戟IntelARC这两年的消费级显示市场有点乱,但还算乱中有序。何出此言?就整个市场发展趋势来看,消费级显卡产品仍然保持两年一更的迭代节奏,NVIDIA作为市场龙头继续领跑,AMD怀揣Radeo……消炎药对身体有哪些危害消炎药对身体伤害很大吗消炎药是我们都很熟悉的一种药物,一般是生病了,身体有炎症才需要服用消炎药,而经常服用消炎药会对我们的身体产生很多不良的影响,因此我们便来了解一下消炎药对身体有哪些危害?消炎药对……海底捞美甲时间海底捞凌晨可以美甲吗海底捞美甲是为在排队的客人提供的免费服务,虽然款式单一,但是做出来的质量和美甲店也差不了多少。那么海底捞美甲有时间限制吗。海底捞美甲时间海底捞的美甲师他的工作时间是跟着海……618新机中的新黑马,天玑8100Max120HzLCD屏,自从时间进入了6月份之后,我们会发现,几乎就没有什么厂商在发布新机产品了,因为对于前几个月来说,6月份有一个非常重要的活动,那就是年中大促618活动。到了这个时候,就会各家的手……舞昆美白丸和pola哪个好舞昆美白丸白袋子和黑袋子区别舞昆美白丸和pola美白丸都是十分受欢迎的美白丸品牌,对于有美白需求的女生们来说,其实效果确实不错,那么舞昆美白丸和pola美白丸哪个更好呢?舞昆美白丸和pola哪个好舞……过年红包要包多少过年包红包有什么讲究过年包红包是我们每一年都会经历的事情,小时候我们收红包,长大之后就轮到我们包红包了,其实过年包红包是有一定讲究的,下面小编为大家讲解一下。过年红包要包多少过年包红包的数额……宛平古城,不能忘却的城,七七事变发生地,游历中忆一段历史来京游客很少会把宛平古城列入旅行单上,可能是路远的原因,也许是看点不多,或者是日程上安排不来,然而在我看来,此处还是留爷的,毕竟一段历史摆在那里,还是原貌的。宛平古城是免……库里三分9中0维金斯26分,勇士战胜绿军总决赛3比2尽管库里今天手感低迷,但第三节被凯尔特人追回领先分差的勇士,靠着维金斯、普尔和汤普斯在第四节初联手杀出10比0攻势,再次拉开领先差距。绿衫军虽然企图追赶,但双枪命中率却不理想,……过年要给公婆包红包吗过年给公婆多少钱合适过年是家人团聚的时刻,父母亲人劳碌了一年好不容易待在一起,做子女的也应该孝敬父母有所表示。但是新娘作为女方需要给公婆包红包吗。过年要给公婆包红包吗最好是给。过年给红包是晚……手机连上WiFi后,该不该关闭移动数据?中国移动给出了答案手机的出现给人们的生活带来了极大的改变,而互联网时代的发展,从原来的2G到现在5G时代,都足以看出社会的发展一直以来都是十分迅速的,尤其是这一次5G网络在逐步发展。虽然说5G时……过年怎么要红包如何巧妙的要红包马上就要到春节了,除了美食和新衣服之外,最令人期待的环节大概就是收红包啦。过年不好意思要红包吗,下面几招教你缓解要红包的尴尬。过年怎么要红包拜年一定要嘴巴甜,要主动出击。……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网