SpringBoot 插件 spring-boot-maven-plugin 原理,以及SpringBoo工程部署的 jar 包瘦身实战
关于原理上面这篇文章写得很详细
关于Maven详细可以看这篇
1、mvn命令
目录的target目录保存编译后的文件
命令 | 功能 |
mvn clean | 清除target目录(编译的文件,即xxx.class文件) |
mvn complie | 编译src\main\java,生成target目录(xxx.java->xxx.class) |
mvn test | 执行第2命令,编译测试项目和项目,在target目录下多生成test-classes目录 |
mvn package | 执行第2-3条命令,并打包项目,打成war还是jar要看pom.xml的packgeing标签 |
mvn install | 执行第2-第4条命令,并且在把项目jar包安装在本地仓库 |
mvn deploy | 执行第2-第5条命令,发布项目 |
2、maven的概念模型
- (1)第一部分项目的坐标和自身的相关信息
- (2)第二部分,配置项目运行所依赖的jar包
- (3)第三部分,配置项目运行环境所需要的插件
1. pom.xml:
标签 | 信息 |
---|---|
dependencies标签之前的信息 | 项目自身信息 |
dependencies标签内 | 运行时所依赖的jar包信息 |
build标签内 | 项目运行环境信息,比如jdk,tomcat |
2. 依赖管理模型:
放置的都是jar包坐标:
标签 | 信息 |
---|---|
groupId | 公司组织的名称 |
artifactId | 项目名 |
version | 版本号 |
scope | 作用域,常用于解决jar包冲突问题 |
3.plug.in:
在maven的默认生命周期里,调用的构建命令都由maven的plug in插件去实现,达到一键构建的效果。
3、自我理解:
maven是一个服务于Java台的自动化工具。自动化在哪里呢?
(测试、部署、编译、打包、管理包)
1、以前我们需要什么工具就要往项目导入对应的jar包。这种情况下如果是多人开发,就会导致项目整合后会有大量重复的jar包,使得项目变得臃肿重复。而Maven提供一个中央仓库,把各类工具包都放在了中央仓库。整合之后直接从仓库拉去就好
2、提供一键化的清除打包上传功能,但是它默认的打包功能(maven package)是不会将项目所依赖的jar包一同打包的。可以去看看打包的jar里面有没有lib目录,这个目录里面就是存放依赖包的。 意思是如果B项目需要A.jar包才能跑起来,而C项目需要B项目才能跑,你在用它自带的maven package打包B项目的时候,B.jar里面是没有A.jar的。所以把B.jar给C项目也没用,根本跑步起来。
这时候就要用到maven的打包插件了(spring-boot-maven-plugin),然后就直接maven package会将所需要的依赖导入jar包里了(lib里面),同时生成jar.original原始jar包,即不包含任何所需要的依赖。
注意:如果你的项目没有继承spring-boot-starter-parent 这个POM,你需要做如下配置,将目标绑定到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>