如何实现一个有趣的Java脚手架

108 篇文章 1 订阅
102 篇文章 0 订阅

新建应用面临的问题

在实际项目来发中,当我们创建一个新应用时,大概会遇到哪些问题?

  1. 创建应用过程比较繁琐,很多内容其实都是类似的,但就是得重新写一遍。有人可能会说用 Spring Initializr
    ,对于自己测试来说还好,但对于实际项目来说,还是不太方便。首先,每个公司里面应该都会有对应的应用分层规范,这时候一个项目是涉及到多个模块的,从这一点上来说,
    Spring Initializr 就不支持;然后一些公司自己的二方包,也没办法快速引用

  2. 模块问题:对于一些复杂的业务系统,真的是有非常多的模块,如果没有系统的学习过相关内容,或者没有经历过这么复杂的业务开发,可能我们很难理解为什么会有这么多的模块?但不可否认的是,很多项目就是这么复杂

  3. 依赖问题:一种是各类开源的依赖;还一种是公司自己开发的一些公用组件,或基于一些开源组件二次开发的组件。引用开源组件时一般都是看对应的官方文档,公司自己开发的一般也有对应的接入文档。但如果涉及到的依赖太多,接入成本其实很大的。一个是依赖之间的版本管理问题;一个是各个组件的初始化配置问题。对于老同学来说,还比较好解决,该踩的坑都踩过了,但对新人来说,是一件非常痛苦的事情:可能中途会遇到各种问题,会浪费很多时间,环境问题本来就是很复杂的问题

  4. 配置问题:每个公司对配置的管理肯定是不一样的,这一块其实也是很头痛的;文档详细还好,文档如果不详细,很磨人的。这里少了个配置也要引入这个namespace,那里少了个配置要引入那个namespace,新人哪里知道那么多?或者说没接触过哪里知道这些?这时候很依赖文档,然后就想问问你,你对自己维护的文档很满意吗?一个应用中可能依赖了很多技术栈,每个技术栈对应的文档都散落在不同的地方,难搞

  5. 对于市面上的一些开源脚手架项目,一般就是集成了一大堆功能,其实用处不大。和公司自己的技术栈对不上,有什么用?有些应用也根本用不上那么多功能,还得自己再把这些内容给删除,搞来搞去,最后出问题的可能性可能更大
    《2020最新Java基础精讲视频教程和学习路线!》

如何解决这些问题

  1. 创建应用过程比较繁琐,每次都要写大量类似的东西:我们可以提供对应的模板,然后有一个对应的脚手架基于这些模板快速创建一个应用
  2. 模块问题:脚手架肯定要支持多模块,可以基于 Spring Initializr 该创造,也可以自己实现,但肯定要能支持多模块
  3. 依赖问题:一般就是公司自己维护一个父pom,然后所有的应用都使用这个父pom,这样可以有效的解决依赖冲突问题
  4. 配置问题:基于脚手架生成的应用,同时为引入的组件生成相关的初始化代码,可以在代码注释中带上相关的文档链接

还有哪些可以优化

  1. 使用方式必须要简单: 参考 Spring Initializr 和 阿里 Starter 的使用方式,直接在界面上勾勾选选
  2. 灵活性:动态新增修改一些组件相关的信息,比如版本升级,应该是可配置的。这部分相关的内容可以由管理员来维护
  3. 友好提示:在组件展示的时候,该组件对应的负责人和文档链接应该展示出来,以便使用者可以便捷的了解这个组件
  4. 示例代码:基于脚手架创建应用时候,同时可以根据用户选择的组件生成对应的示例代码。但这部分应该是可选的,新人可能有示例代码会友好一些,但老同学可能觉得没必要
  5. 动态模板:不同业务团队,可能需要生成的模板代码是不一样的。怎么说?公司内对于应用的层次结构基本是一致的,但是不用的业务团队,需要生成的对应的模板可能是不一样的,而如果不用模板生成就会带来很多重复性工作。这一块也需要支持
  6. 一体化:公司内新建一个应用,应该需要去对应的系统上注册,可以和这个注册系统打通,应用注册成功直接跳转对应的脚手架创建应用界面,创建成功后直接将这部分文件初始化的gitlab

如何实现

  1. 开始参考了 Spring Initializr
    的实现,觉得有点复杂,也不够灵活,所以还是基于freemarker实现了一个。基于freemarker实现有一个好处:灵活,可玩性比价大,比如说:我希望在创建应用的时候,将对应的创建人添加到代码注释上。这应该是一个比较常见的需求吧?脚手架接入SOS就可以获取到当前应用创建人信息,在用户创建应用的时候,我们可以将对应的用户信息存到上下文并透传给freemarker。同理,基于这个特性,我么可以定义一些其它的变量,可玩性比较高
  2. 应用 -> 模块 -> 依赖 : 三层结构。依赖就是我们应用中具体的依赖;模块是通用的:比如 WEB层、SERVER层、CORE层
    等等;一个应用对应一个或多个模块,代表这个应用的结构。基于这个我们可以定义一些通用的应用,比如:简单应用、复杂应用、测试专用
    等等。这样用户在创建应用时,就可以根据业务的复杂度快速的选择一个模块来创建应用了。应用、模块、依赖
    都是可配置的,基于这个我们可以快速的创建一个新的应应用模板
  3. 模板文件:可配置。通过控制台可以上传对应的模板文件,除此之外每个模板文件应该有对应的作用域:所有范围生效、或者针对某个应用类型、或这对某个模块、或针对某个依赖
  4. 依赖问题:依赖之间的引用问题,一些依赖可能除了本身,还需要引入一些其它的依赖;一个模块也可以看成是另一个模块的依赖,这些问题都要处理好
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值