创建springboot_快速创建一个SpringBoot应用

前提

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

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

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

序号组件版本号描述
1maven-compiler-plugin3.8.1Maven编译插件
2spring-boot-starter2.3.1.RELEASEIOC容器核心组件
3spring-boot-maven-plugin2.3.1.RELEASESpringBoot封装的Maven插件
4lombok1.18.12-

创建一个单模块的SpringBoot应用

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

28fca6cdddfa8316cbf9df328fdc32ce.png

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

b23ac8ff2399ebd34c866490d894c09e.png

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

44e34730b7faa20a815e1bd982fe44ae.png

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

54943c4b1b16aafd0d90a4888b5eb41c.png

创建出来的是一个标准的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.0modelVersion>
    <groupId>club.throwablegroupId>
    <artifactId>spring-boot-guideartifactId>
    <version>1.0-SNAPSHOTversion>
    
    <packaging>jarpackaging>
    <name>spring-boot-guidename>
    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        <maven.compiler.plugin.version>3.8.1maven.compiler.plugin.version>
        <lombok.version>1.18.12lombok.version>
        <spring.boot.version>2.3.1.RELEASEspring.boot.version>
    properties>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-dependenciesartifactId>
                <version>${spring.boot.version}version>
                <scope>importscope>
                <type>pomtype>
            dependency>
        dependencies>
    dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <version>${lombok.version}version>
            <scope>providedscope>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>
    <build>
        
        <finalName>spring-boot-guidefinalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>${maven.compiler.plugin.version}version>
                <configuration>
                    <source>${maven.compiler.source}source>
                    <target>${maven.compiler.targettarget>
                    <encoding>${project.build.sourceEncoding}encoding>
                configuration>
            plugin>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>${spring.boot.version}version>



                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
project>

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

b0ffb30bcbde74ab3615ab0cf2041354.png
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函数后输出如下:

85327b20af7cefb02ddde43aa28a9b66.png

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

创建一个多模块的SpringBoot应用

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

dcb0cc07c4f0aef376b168f5fedee526.png

后续的步骤与上一小节的过程完全相同,不过定义的模块名称必须和根项目的名称不相同,这里定义为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.0modelVersion>
    <groupId>club.throwablegroupId>
    <artifactId>spring-boot-guideartifactId>
    <version>1.0-SNAPSHOTversion>
    <modules>
        <module>ch0-dependencymodule>
    modules>
    <packaging>pompackaging>
    <name>spring-boot-guidename>
    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <maven.compiler.source>1.8maven.compiler.source>
        <maven.compiler.target>1.8maven.compiler.target>
        <maven.compiler.plugin.version>3.8.1maven.compiler.plugin.version>
        <lombok.version>1.18.12lombok.version>
        <spring.boot.version>2.3.1.RELEASEspring.boot.version>
    properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-dependenciesartifactId>
                <version>${spring.boot.version}version>
                <scope>importscope>
                <type>pomtype>
            dependency>
        dependencies>
    dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <version>${lombok.version}version>
            <scope>providedscope>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>
    dependencies>
    <build>
        <finalName>spring-boot-guidefinalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <version>${maven.compiler.plugin.version}version>
                <configuration>
                    <source>${maven.compiler.source}source>
                    <target>${maven.compiler.targettarget>
                    <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.0modelVersion>
    <parent>
        <groupId>club.throwablegroupId>
        <artifactId>spring-boot-guideartifactId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <artifactId>ch0-dependencyartifactId>
    <version>1.0-SNAPSHOTversion>
    <packaging>jarpackaging>
    <name>ch0-dependencyname>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starterartifactId>
        dependency>
    dependencies>
    <build>
        <finalName>ch0-dependencyfinalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
                <version>${spring.boot.version}version>


                           
                <executions>
                    <execution>
                        <goals>
                            <goal>repackagegoal>
                        goals>
                    execution>
                executions>
            plugin>
        plugins>
    build>
project>

注意:

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

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

7e72953a7bd037eac7cf93762147928d.png

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

代码仓库

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

  • Github:https://github.com/zjcscut/spring-boot-guide

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

技术公众号(《Throwable文摘》,id:throwable-doge),不定期推送笔者原创技术文章(绝不抄袭或者转载):

8eb9db7c538a300158e725028ee1eb2f.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值