Springboot源码分析之项目结构

摘要:

  • 无论是从IDEA还是其他的SDS开发工具亦或是https://start.spring.io/ 进行解压,我们都会得到同样的一个pom.xml文件

    4.0.0

    org.springframework.boot
    spring-boot-starter-parent
    2.1.6.RELEASE

        <groupId>com.github.dqqzj</groupId>
        <artifactId>springboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>springboot</name>
        <packaging>jar</packaging>
        <description>Demo project for Spring Boot</description>
    
        <properties>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <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>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>

parent标签的含义

  • 找到本地仓库的spring-boot-starter-parent 坐标

    4.0.0

    org.springframework.boot
    spring-boot-dependencies
    2.1.6.RELEASE
    ../../spring-boot-dependencies

    spring-boot-starter-parent
    pom
    Spring Boot Starter Parent
    Parent pom providing dependency and plugin management for applications
    built with Maven
    https://projects.spring.io/spring-boot/#/spring-boot-starter-parent

    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <resource.delimiter>@</resource.delimiter>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.target>${java.version}</maven.compiler.target>

    true
    ${basedir}/src/main/resources

    **/application*.yml
    **/application*.yaml
    **/application*.properties

    ${basedir}/src/main/resources

    **/application*.yml
    **/application*.yaml
    **/application.properties

    org.jetbrains.kotlin
    kotlin-maven-plugin
    ${kotlin.version}

    compile
    compile

    compile

    test-compile
    test-compile

    test-compile

    ${java.version}
    true

    maven-compiler-plugin

    true

    maven-failsafe-plugin

    integration-test
    verify

    ${project.build.outputDirectory}

    maven-jar-plugin

    ${start-class}
    true

    maven-war-plugin

    ${start-class}
    true

    org.codehaus.mojo
    exec-maven-plugin

    ${start-class}

    maven-resources-plugin

    ${resource.delimiter}

    false

    pl.project13.maven
    git-commit-id-plugin

    revision

    true
    yyyy-MM-dd'T'HH:mm:ssZ
    true
    ${project.build.outputDirectory}/git.properties

    org.springframework.boot
    spring-boot-maven-plugin

    repackage

    repackage

    ${start-class}

    maven-shade-plugin

    package

    shade

    META-INF/spring.handlers

    META-INF/spring.factories

    META-INF/spring.schemas

    ${start-class}

    org.springframework.boot
    spring-boot-maven-plugin
    2.1.6.RELEASE

    true
    true

    :

    META-INF/.SF
    META-INF/.DSA
    META-INF/
    .RSA

    org.eclipse.m2e
    lifecycle-mapping
    1.0.0

    org.codehaus.mojo
    flatten-maven-plugin
    [1.0.0,)

    flatten

    org.apache.maven.plugins
    maven-checkstyle-plugin
    [3.0.0,)

    check

关注点
  •   <parent>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-dependencies</artifactId>
          <version>2.1.6.RELEASE</version>
          <relativePath>../../spring-boot-dependencies</relativePath>
        </parent>

说明我们的工程可以进行改造进行替换掉原来工程的parent标签.

  • <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <executions>
                <execution>
                  <id>repackage</id>
                  <goals>
                    <goal>repackage</goal>
                  </goals>
                </execution>
              </executions>
              <configuration>
                <mainClass>${start-class}</mainClass>
              </configuration>
            </plugin>

    repackage必须要有否则打jar包时候无法正常启动.

在配置文件加上repackage即可

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

IDEA自带maven工具

mvnw是基于linuxshell脚本命令

mvnw.cmd是基于windows的脚本命令

.mvn包含了maven下载路径以及版本等信息

也就是说我们完全不用自己下载maven而是可以直接使用IDEA给我们提供的工具即可,只不过通常不会这么做。

repackage的作用

  • 官方文档
  • 正常情况下打包会生成springboot-0.0.1-SNAPSHOT.jar,original,springboot-0.0.1-SNAPSHOT.jar这样的2个文件,而repackage的作用就是将springboot-0.0.1-SNAPSHOT.jar.original重新打包为我们可以执行的springboot-0.0.1-SNAPSHOT.jar

Springboot源码分析之项目结构的更多相关文章

  1. gperftools源码分析和项目应用 - CPU Profiler

    gperftools源码分析和项目应用 - CPU Profiler 原文:https://blog.csdn.net/yubo112002/article/details/81076821 原文链接 ...

  2. MySQL源码分析以及目录结构 2

    原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...

  3. MySQL源码分析以及目录结构

    原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...

  4. ffplay源码分析2-数据结构

    ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg提供的解码器和SDL库进行视频播放.本文基于FFmpeg工程4.1版本进行分析,其中ffplay源码清单如下: https://gith ...

  5. SpringBoot源码分析之SpringBoot的启动过程

    SpringBoot源码分析之SpringBoot的启动过程 发表于 2017-04-30   |   分类于 springboot  |   0 Comments  |   阅读次数 SpringB ...

  6. IdentityServer4源码解析_1_项目结构

    目录 IdentityServer4源码解析_1_项目结构 IdentityServer4源码解析_2_元数据接口 IdentityServer4源码解析_3_认证接口 IdentityServer4 ...

  7. 从SpringBoot源码分析 配置文件的加载原理和优先级

    本文从SpringBoot源码分析 配置文件的加载原理和配置文件的优先级     跟入源码之前,先提一个问题:   SpringBoot 既可以加载指定目录下的配置文件获取配置项,也可以通过启动参数( ...

  8. springboot源码分析-SpringApplication

    SpringApplication SpringApplication类提供了一种方便的方法来引导从main()方法启动的Spring应用程序 SpringBoot 包扫描注解源码分析 @Spring ...

  9. Springboot源码分析之jar探秘

    摘要: 利用IDEA等工具打包会出现springboot-0.0.1-SNAPSHOT.jar,springboot-0.0.1-SNAPSHOT.jar.original,前面说过它们之间的关系了, ...

随机推荐

  1. GPS常识-B版(简)

    第一章 绪论 1.简述GPS系统的特点有哪些? 在测绘工程中有如下优点:(1)定位精度高(2)观测时间短(3)测站间无需通视(4)可提供地心坐标(5)操作简便(6)全天候作业(7)功能多.应用广 GP ...

  2. 洛谷 P1101-题解

    这道题可以用深搜(回溯)来写,相信大部分人都是这么想的,但是有些人可能在一些地方饶了半天,所以这里就贴一下我的思路,个人觉得自己的很好懂,除了tx和ty那里,但是tx和ty的那种用法对于输出路径的题目 ...

  3. idea导入ssm javaweb maven项目

    本文笔者辛苦整理, 除了为方便大家贴的maven安装配置和方便的现有项目, 如转载请注明: https://www.cnblogs.com/m-yb/p/11229320.html idea导入ssm ...

  4. python 之 并发编程(线程理论,开启线程的两种方式,进程与线程的区别,线程对象的其他方法)

    9.9 线程理论 1.什么是线程 线程指的是一条流水线的工作过程 进程根本就不是一个执行单位,进程其实是一个资源单位,一个进程内自带一个线程,线程才是执行单位 2.进程VS线程 同一进程内的线程们共享 ...

  5. 《VR入门系列教程》之12---转换矩阵

    转换矩阵     模型网格的三维空间位置都是由它们的顶点坐标决定的,如果每次想要移动一下模型位置都要依次改变每个网格的顶点坐标,这将一件非常头疼的事,要是遇上需要显示动画效果那就更糟了.为了解决这个问 ...

  6. 了解下Java中的Serializable

      在项目中也写了不少的JavaBean,也知道大多的JavaBean都实现了Serializable接口,也知道它的作用是序列化,序列化就是保存,反序列化就是读取.主要体现在这两方面: 1.存储.将 ...

  7. 箭头函数=>

    箭头函数特点一:没有自己的this对象,其this对象为所在环境 特点二 :没有arguments参数 可以用...rest代替特点三:不能使用构造函数,不可使用new命令,否则会报错 //函数的扩展 ...

  8. 原创:微信小程序开发要点总结

    废话不多少,下面是对我从开发微信小程序的第一步开始到发布的总结,觉得对您有帮助的话,可以赞赏下,以对我表示鼓励. 一:首先注册登录微信公众平台,这个平台很重要,以后查文档全在上面看.https://m ...

  9. 洛谷 P3387 题解

    题面 裸跑一遍SPFA,统计每个点的入队次数: 如果该点的入队次数>=总点数,那么该点便是一个负环上的点: 重点!!!: 1.不是“YES”,是“YE5”: 2.不是“NO”,是“N0”:(是零 ...

  10. .net core使用ocelot---第一篇 简单使用

    简介原文地址 接下来你会学习,基于asp.net core 用Ocelot实现一个简单的API网关.或许你会疑问什么是API网关,我们先看下面的截图 API网关是访问你系统的入口,它包括很多东西,比如 ...