Springboot源码分析之项目结构
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-dependenciesspring-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.propertiesorg.jetbrains.kotlin
kotlin-maven-plugin
${kotlin.version}compile
compilecompile
test-compile
test-compiletest-compile
${java.version}
truemaven-compiler-plugin
true
maven-failsafe-plugin
integration-test
verify${project.build.outputDirectory}
maven-jar-plugin
${start-class}
truemaven-war-plugin
${start-class}
trueorg.codehaus.mojo
exec-maven-plugin${start-class}
maven-resources-plugin
${resource.delimiter}
false
pl.project13.maven
git-commit-id-pluginrevision
true
yyyy-MM-dd'T'HH:mm:ssZ
true
${project.build.outputDirectory}/git.propertiesorg.springframework.boot
spring-boot-maven-pluginrepackage
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.RELEASEtrue
true:
META-INF/.SF
META-INF/.DSA
META-INF/.RSAorg.eclipse.m2e
lifecycle-mapping
1.0.0org.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
是基于linux
的shell
脚本命令
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源码分析之项目结构的更多相关文章
- gperftools源码分析和项目应用 - CPU Profiler
gperftools源码分析和项目应用 - CPU Profiler 原文:https://blog.csdn.net/yubo112002/article/details/81076821 原文链接 ...
- MySQL源码分析以及目录结构 2
原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...
- MySQL源码分析以及目录结构
原文地址:MySQL源码分析以及目录结构作者:jacky民工 主要模块及数据流经过多年的发展,mysql的主要模块已经稳定,基本不会有大的修改.本文将对MySQL的整体架构及重要目录进行讲述. 源码结 ...
- ffplay源码分析2-数据结构
ffplay是FFmpeg工程自带的简单播放器,使用FFmpeg提供的解码器和SDL库进行视频播放.本文基于FFmpeg工程4.1版本进行分析,其中ffplay源码清单如下: https://gith ...
- SpringBoot源码分析之SpringBoot的启动过程
SpringBoot源码分析之SpringBoot的启动过程 发表于 2017-04-30 | 分类于 springboot | 0 Comments | 阅读次数 SpringB ...
- IdentityServer4源码解析_1_项目结构
目录 IdentityServer4源码解析_1_项目结构 IdentityServer4源码解析_2_元数据接口 IdentityServer4源码解析_3_认证接口 IdentityServer4 ...
- 从SpringBoot源码分析 配置文件的加载原理和优先级
本文从SpringBoot源码分析 配置文件的加载原理和配置文件的优先级 跟入源码之前,先提一个问题: SpringBoot 既可以加载指定目录下的配置文件获取配置项,也可以通过启动参数( ...
- springboot源码分析-SpringApplication
SpringApplication SpringApplication类提供了一种方便的方法来引导从main()方法启动的Spring应用程序 SpringBoot 包扫描注解源码分析 @Spring ...
- Springboot源码分析之jar探秘
摘要: 利用IDEA等工具打包会出现springboot-0.0.1-SNAPSHOT.jar,springboot-0.0.1-SNAPSHOT.jar.original,前面说过它们之间的关系了, ...
随机推荐
- Spring 动态创建并切换数据源
公司要求后端项目可以进行动态创建并切换数据源,看了网上很多例子大多数使用的都是Spring内置的AbstractRoutingDataSource进行的,使用此方法不是不行但是有诸多缺陷,比如切换时需 ...
- 为git伸冤(使用git中可能会踩的一些坑)
窦娥被冤,六月飞霜.今天我两次遇到git被冤枉的情况,要是其它人也遇到这种情况导致git使用量缩小,那也要六月飞霜了. git第一次被冤枉是同事以为git的版本管理有问题.事情是这样的,同事提交新版本 ...
- MTSC2019第五届移动互联网测试开发大会PPT下载
关注公众号「软件测试大本营」后台回复「MTSC」或「测试开发大会」即可获取云盘下载地址及提取码. 注:PPT文件版权归相关撰写人所有,仅供学习交流,请勿用于任何商业用途,谢谢 前不久在北京举办了第五届 ...
- .net持续集成sonarqube篇之 sonarqube集成单元测试
系列目录 通过前面章节我们可以看到,不论怎么构建,单元测试覆盖率一栏总是0% 这是因为单元测试覆盖率报告需要额外集成.这一节我们就讲解如何在sonarqube里集成单元测试覆盖率报告. 这里需要借助O ...
- vue.js带复选框表单的增删改查
近段时间由于公司项目要求,前端开始使用VUE框架进行开发,最近刚开始学习,做了一个表单的增删改查,和大家分享一下. 页面模型代码设计如下 <template> <div id=&qu ...
- Jenkins-slave实现并行的自动化测试
前言 上篇文章搭建了Jenkins-slave的分布式测试环境,我一直在想一个问题,使用这种模式能不能实现并发的自动化测试?我的想法是:同一套UI自动化的测试代码,是否能够通过一个Job绑定多个sla ...
- 在ts+vue中实现前端批量下载打包二维码
---恢复内容开始--- 一.插件安装 首先是插件的安装与引入,这里我们用的是qrcode的这个插件,直接使用npm install qrcodejs2安装即可,但是这里要注意,如果你用的是ts进行开 ...
- jsp数据交互(二).3
01.Application原理与应用 01.application对象的作用域范围是整个应用服务,而它在应用中所承担的责任就类似于一个全局变量.只要服务启动,则application对象就会存在. ...
- STL 大法好
#include <vector> 1.支持随机访问,但不支持在任意位置O(1)插入: 2.定义: ```cpp vector<int> a; ``` ...
- 林大妈的JavaScript基础知识(三):JavaScript编程(4)数组
数组,是一段线性分配的,具有非常高性能的数据结构.简单地说,数组以连续的空间存储,通过整数地计算偏移量访问其中的元素,将读取修改的时间复杂度降低至O(1),我们称之为猝发式存取.是不是非常期待?没错, ...