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,前面说过它们之间的关系了, ...
随机推荐
- activiti学习笔记
activiti入门 activiti官网 pom.xml文件 xml <!-- activiti --> <dependency> <groupId>org.ac ...
- TCP传输协议中如何解决丢包问题
TCP在不可靠的网络上实现可靠的传输,必然会有丢包.TCP是一个“流”协议,一个详细的包将会被TCP拆分为好几个包上传,也是将会把小的封裝成大的上传,这就是说TCP粘包和拆包难题. 但是许多人有不同的 ...
- vue+element项目中使用el-dialog弹出Tree控件报错问题
1. 按正常的点击按钮,显示dialog弹出的Tree控件,然后把该条数据下的已经选中的checkbox , 用setCheckedNodes或者setCheckedKeys方法选择上 , 报下面这个 ...
- weblogic安装时检查监视器: 必须配置为至少显示 256 种颜色,实际空间未知→失败
1.首先如果你出现的结果是[未通过],则设置DISPLAY环境变量. 按网上方法:export DISPLAY=:0.0 然后继续安装你的东西……若成功则恭喜你~ 若[失败],按网上方法让你去看日志 ...
- Java 8 终于支持 Docker!
Java 8曾经与Docker无法很好地兼容性,现在问题已消失. 请注意:我在本文中使用采用GNU GPL v2许可证的OpenJDK官方docker映像.在Oracle Java SE中,这里描述的 ...
- C# backgroundwork的使用方法
引言:在 WinForms 中,有时要执行耗时的操作,在该操作未完成之前操作用户界面,会导致用户界面停止响应.解决的方法就是新开一个线程,把耗时的操作放到线程中执行,这样就可以在用户界面上进行其它操作 ...
- 《VR入门系列教程》之2---VR头显
什么是虚拟现实? 虚拟现实的目标:让人们相信真实地处于一个虚拟世界中.要达到这个目标就得让人们的大脑(负责视觉和运动感知部分)欺骗他们.不同技术合在一起才可以创造这种幻觉,包括: 全立 ...
- jquery3和layui冲突导,致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
项目中使用的jquery版本是jquery-3.2.1,在使用layui弹出全屏iframe窗口时,iframe窗口顶部总是出现一个152px高的滚动窗口无法实现真正全屏,代码如下: <!DOC ...
- Shiro权限管理框架(二):Shiro结合Redis实现分布式环境下的Session共享
首发地址:https://www.guitu18.com/post/2019/07/28/44.html 本篇是Shiro系列第二篇,使用Shiro基于Redis实现分布式环境下的Session共享. ...
- python post接口测试第一个用例日记
如下是我自己公司的一个请求,学习过程顺便记录下,都是白话语言,不那么专业,不喜勿喷! 首先看下图,post请求一般需要填写参数url, data(一般是表格类型的参数,如我们智联驾驶APP登录的参数) ...