前提

这篇文章是《SpringBoot2.x入门》专辑的第2篇文章,使用的SpringBoot版本为2.3.1.RELEASEJDK版本为1.8

常规的套路会建议使用Spring官方提供的工具Spring Initializr通过指定配置创建一个SpringBoot项目,但是考虑到Spring Initializr必须联网使用,对于项目配置和依赖的控制粒度不够精细,本文会从更一般的情况考虑,详细分析怎么通过MavenIntelliJ IDEA(下称IDEA)快速创建一个SpringBoot应用,包括单模块的Maven和多模块的Maven应用创建。

依赖分析

必要的插件:

  • Maven编译插件:maven-compiler-plugin
  • SpringBoot封装的Maven插件(一般必选,项目最终打包依赖到这个插件,它的版本建议跟随选用的SpringBoot的版本):spring-boot-maven-plugin

Maven编译插件尽可能选用高版本,以适配更高版本的JDK。一般会选用的基本依赖如下:

  • lombok(可选,个人认为能提高开发效率,不过需要安装对应的插件)。
  • junitspring-boot-starter-test):单元测试。
  • spring-boot-starterBean管理、配置读取等,简单理解就是IOC容器核心组件和一些扩展。
  • spring-boot-starter-web:基于spring-boot-starter扩展,主要集成了SpringMVC的功能。

多数情况下,选用spring-boot-starter-web即可,版本选取REALEASE版本即可,注意尽可能整套项目使用同一个大版本的SpringBoot。

下面例子用到的各个组件的版本如下:

序号 组件 版本号 描述
1 maven-compiler-plugin 3.8.1 Maven编译插件
2 spring-boot-starter 2.3.1.RELEASE IOC容器核心组件
3 spring-boot-maven-plugin 2.3.1.RELEASE SpringBoot封装的Maven插件
4 lombok 1.18.12 -

创建一个单模块的SpringBoot应用

点击IDEA主菜单File -> Project进入创建新项目的界面:

选择左侧的Maven选项,上方下拉选择好JDK版本,勾选Create from archetype,然后选中maven-archetype-webapp这个骨架的RELEASE版本,然后点击下一步按钮:

输入项目的GAV,选定项目的磁盘目录,然后点击下一步按钮:

选定Maven的安装路径、配置文件和本地仓库,配置好相应的属性,最后点击完成即可:

创建出来的是一个标准的Maven项目,它的结构如下:

spring-boot-guide
- src
- main
- webapp
- web.xml
- pom.xml

一般可以直接删除src/main/webapp目录,在pom.xml中增加对应的依赖,最终的pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>club.throwable</groupId>
<artifactId>spring-boot-guide</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 指定打包方式为Jar -->
<packaging>jar</packaging>
<name>spring-boot-guide</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
<lombok.version>1.18.12</lombok.version>
<spring.boot.version>2.3.1.RELEASE</spring.boot.version>
</properties>
<!-- BOM全局管理starter版本 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<!-- 指定最终打出来的Jar包的名称 -->
<finalName>spring-boot-guide</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<!-- <configuration>-->
<!-- <mainClass>可选配置,这里填写启动类的全类名</mainClass>-->
<!-- </configuration>-->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

有依赖版本变动,只需要直接修改properties元素中对应的版本号即可。在src/main下新建启动类java/club/throwable/App.java

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; @Slf4j
@SpringBootApplication
public class App implements CommandLineRunner { public static void main(String[] args) {
SpringApplication.run(App.class, args);
} @Override
public void run(String... args) throws Exception {
log.info("Hello SpringBoot!");
}
}

启动App中的main函数后输出如下:

spring-boot-starter模块引入的只是核心容器组件,并没有集成像Tomcat这样的Servlet容器,启动后不会挂起主线程,所以执行完CommandLineRunner中的逻辑就会自行退出主线程。

创建一个多模块的SpringBoot应用

多模块应用的创建基于单模块应用,准确来说就是在一个创建完的单模块应用中添加新的模块(New Module)。在原来的根项目spring-boot-guide右键弹出菜单中选择新建模块:

后续的步骤与上一小节的过程完全相同,不过定义的模块名称必须和根项目的名称不相同,这里定义为ch0-dependency,然后调整父pom.xml和子pom.xml

  • spring-boot-guide -> pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>club.throwable</groupId>
<artifactId>spring-boot-guide</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
<module>ch0-dependency</module>
</modules>
<packaging>pom</packaging>
<name>spring-boot-guide</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
<lombok.version>1.18.12</lombok.version>
<spring.boot.version>2.3.1.RELEASE</spring.boot.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>spring-boot-guide</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven.compiler.plugin.version}</version>
<configuration>
<source>${maven.compiler.source}</source>
<target>${maven.compiler.target</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
  • spring-boot-guide/ch0-dependency -> pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>club.throwable</groupId>
<artifactId>spring-boot-guide</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>ch0-dependency</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>ch0-dependency</name>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
</dependencies>
<build>
<finalName>ch0-dependency</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring.boot.version}</version>
<!-- <configuration>-->
<!-- <mainClass>club.throwable.App</mainClass>-->
<!-- </configuration>-->
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

注意:

  • spring-boot-maven-plugin一般情况下只需配置在需要打包的模块中,一般父模块是全局管理的模块,不需要全局定义此插件。
  • maven-compiler-plugin可以配置在父模块中,让所有子模块都应用此插件。
  • spring-boot-starter-testlombok可以在父模块的dependencies元素中添加,相当于所有子模块都引入了这两个依赖。

父模块中的spring-boot-guidesrc模块需要丢弃,可以直接剪切到ch0-dependency子模块中,如下:

后面再添加其他新的模块,直接重复上述的步骤即可。

代码仓库

这里给出本文搭建的一个多模块的SpringBoot应用的仓库地址(持续更新):

(本文完 c-2-d e-a-20200701 8:39 AM)

SpringBoot2.x入门:快速创建一个SpringBoot应用的更多相关文章

  1. 如何使用IDEA快速创建一个springboot项目

    如何使用IDEA快速创建一个springboot项目 https://jingyan.baidu.com/article/0964eca24fdd938284f53640.html

  2. 快速创建一个springboot项目

    创建一个maven项目(springboot.mybatis-plus) 目标:可以访问ftl页面.对象(json字符串),可以进行单元测试 1.新建一个maven项目,选择模板maven-arche ...

  3. 快速创建一个SpringBoot项目并整合Mybatis

    2019-09-15 一.Maven环境搭建 1.导入jar坐标 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  4. 快速构建一个 Springboot

    快速构建一个 Springboot 官网:http://projects.spring.io/spring-boot/ Spring Boot可以轻松创建可以“运行”的独立的,生产级的基于Spring ...

  5. ASP.NET Core模块化前后端分离快速开发框架介绍之2、快速创建一个业务模块

    源码地址 GitHub:https://github.com/iamoldli/NetModular 演示地址 地址:https://nm.iamoldli.com 账户:admin 密码:admin ...

  6. 快速构建一个springboot项目(一)

     前言: springcloud是新一代的微服务框架而springboot作为springcloud的基础,很有必要对springboot深入学习一下. springboot能做什么? (1)spri ...

  7. CXF 入门:创建一个基于WS-Security标准的安全验证(CXF回调函数使用,)

    http://jyao.iteye.com/blog/1346547 注意:以下客户端调用代码中获取服务端ws实例,都是通过CXF 入门: 远程接口调用方式实现 直入正题! 以下是服务端配置 ==== ...

  8. 通过beego快速创建一个Restful风格API项目及API文档自动化

    通过beego快速创建一个Restful风格API项目及API文档自动化 本文演示如何快速(一分钟内,不写一行代码)的根据数据库及表创建一个Restful风格的API项目,及提供便于在线测试API的界 ...

  9. Android开发的初学者快速创建一个项目

    因为gwf的原因,大陆连不上google所以AndroidSDK是无法更新的 而且设置代理也不一定能解决问题 如果是初学者想快速的了解安卓开发,可以在国内的内网下载整合包 下载地址:http://rj ...

随机推荐

  1. (Java实现) 营救

    问题 B: 营救 时间限制: 1 Sec 内存限制: 128 MB 题目描述 铁塔尼号遇险了!他发出了求救信号.距离最近的哥伦比亚号收到了讯息,时间就是生命,必须尽快赶到那里. 通过侦测,哥伦比亚号获 ...

  2. Java实现 蓝桥杯 算法训练 大小写转换

    算法训练 大小写转换 时间限制:1.0s 内存限制:512.0MB 提交此题 问题描述 编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小 ...

  3. Java实现 蓝桥杯VIP 算法训练 sign函数

    试题 算法训练 sign函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定实数x,输出sign(x)的值. sign(x)是符号函数,如果x>0,则返回1:如果x=0, ...

  4. Java实现 蓝桥杯 算法提高 数组求和

    试题 算法提高 数组求和 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 输入n个数,围成一圈,求连续m(m<n)个数的和最大为多少? 输入格式 输入的第一行包含两个整数n, ...

  5. java实现第四届蓝桥杯空白格式化

    空白格式化 本次大赛采用了全自动机器测评系统. 如果你的答案与标准答案相差了一个空格,很可能无法得分,所以要加倍谨慎! 但也不必过于惊慌.因为在有些情况下,测评系统会把你的答案进行"空白格式 ...

  6. 一篇文章快速入门React框架

    视频教程 本文章在B站配有视频教程 课程目标 了解最常用的React概念和相关术语,例如JSX,组件,属性(Props),状态(state). 构建一个非常简单的React应用程序,以阐述上述概念. ...

  7. 使用请求头认证来测试需要授权的 API 接口

    使用请求头认证来测试需要授权的 API 接口 Intro 有一些需要认证授权的接口在写测试用例的时候一般会先获取一个 token,然后再去调用接口,其实这样做的话很不灵活,一方面是存在着一定的安全性问 ...

  8. 如何在Centos7安装rabbitmq的PHP扩展

    1.先安装rabbitmq-c, wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0 ...

  9. Ubuntu18.04美化MacOS(新更grub界面美化)

    写在前面的话: 在美化过程中大多数资源来自境外网站,下载时速度特别慢,写这篇博客一是为了给读者看,也是为了自己保存资源并记录ubuntu18.04的使用,避免你们或是自己以后再花费大量时间去百度方法和 ...

  10. 大厂面试过程复盘(微信/阿里/头条均拿offer,附答案篇)

    背景 本人前端,3年经验,由于个人的原因,决定跳槽,于是大概3月开始找工作,总历时大概2个月,面试了微信/阿里/头条,三家都拿到了offer,来分享一下面经. 问题比较多,而且很多面试题都是跟个人项目 ...