Skip to content

Instantly share code, notes, and snippets.

@leizhnxp
Created August 30, 2018 07:25
Show Gist options
  • Select an option

  • Save leizhnxp/7b056eea361b181a6d7f64d5a6c6ab26 to your computer and use it in GitHub Desktop.

Select an option

Save leizhnxp/7b056eea361b181a6d7f64d5a6c6ab26 to your computer and use it in GitHub Desktop.

Spring Boot Initializer

介绍 Spring Boot Initializer的用法

概述

Spring Boot相对于传统的基于maven项目结构组织的Spring + SpringMVC项目究竟有什么不同?

那就是,进一步省掉了绝大部分自己搭建项目脚手架的工作

俗话说,万事开头难;但是其实建一个项目也许不是什么难事,因为java世界上有个叫maven的东西,用约定由于配置的理念,把这个事情帮我们设计的已经七七八八的了,但是还有一些具体的东西,也许是maven的创造者和维护者觉得不归他们管,或者有心无力,几乎所有的约定项也都能改(所以说应该是前者,并不是没能力,这就是通常设计抉择最难的部分:是要灵活性?还是要便捷性?),且没有一个真正的标准化模板,结果导致大量的开发者自己在做很多其实最终看起来最终效果又是基本一样的一些事

熟悉maven的同学都知道,maven 社区并没有对这个事情撒手不管,maven有个插件叫archetype,他有个goal叫做generate,执行了他就会有一个大列表来选择创建一个project的骨架,从我们的经验来看,预置的那些基本上都没什么卵用,有的人就动手自己写一些archetype,主要包含这么几个内容:

  • pom文件模板,特别是多模块maven项目的parent部分

    通常会有packaging,初始maven坐标,还有一些类似Java版本、字符集编码等的properties属性值,还有重头戏是dependencyManagement,用来定义所有?!可能?!用到的依赖库的版本信息,这就是所谓的BOM

  • 项目基本结构

    其实是maven的基本上定了,自己再自定义的基本上没有好下场(是的这种破事儿我也干过),一般都会预先创建好src/main/java,src/test/java等目录,web项目里面要预置部署描述符(无论是不是被Spring简化过的),非web里面要有启动类,启动类扫描的Spring的xml Bean定义,还有启动脚本等等

  • SCM库需要排除的路径

    目的很简单,仓库里只有源码和必要的配置文件,但实现这个是最挠头的,曾经svn这个方面真的是比较恶心,很难放到archetype里面的,我曾经迂回用一个脚本来干这种事情;git的gitignore文件则非常好

现在有了 Spring Boot 和 Spring Boot 的 initializer 工具,基本上做到了上面的这些事情虽然不是全部但其实更多,Spring自己管自己这种行为叫做 opinionated

  • initializer 预置好了gitignore文件,基本覆盖了所有常见IDE自身的管理文件和maven约定中的产出物目录
  • 生成的项目框架目录,严格的遵循maven工程目录结构,统一了web和中间件两类java工程的形态,并帮你整理好了程序入口
  • Spring Boot项目自身(准确的说是org.springframework.boot:spring-boot-dependencies)就是一份非常完善的BOM
  • initializer 还可以帮助生成项目pom模板,避免在boot版本更新时候手动从参考文档中copy发生的各种错误

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment