jar包的几种制作方式

写本文章的目的,是回归最基础的jar包打包方式,jar包稍稍有错误就会完全无法运行

jar包几种制作方式:

1.普通java项目打jar包
2.maven的打包方式
3.springboot的打jar包的原理

普通java项目打jar包方式
1.使用IDEA工具打包
首先创建一个普通java项目
jar包的几种制作方式_第1张图片
IDEA打jar包流程
jar包的几种制作方式_第2张图片
jar包的几种制作方式_第3张图片
jar包的几种制作方式_第4张图片
jar包的几种制作方式_第5张图片
然后构建
jar包的几种制作方式_第6张图片
jar包的几种制作方式_第7张图片

jar包的几种制作方式_第8张图片
打开jar包
在这里插入图片描述

这里插入一张springboot嵌入tomcat包
jar包的几种制作方式_第9张图片

(2)使用IDEA模仿spring一些jar包的内容
模仿如下:
jar包的几种制作方式_第10张图片
jar包的几种制作方式_第11张图片
打开test.jar包
jar包的几种制作方式_第12张图片

2.使用命令行,自己制造jar包,麻烦的是自己首先要编译好,安排好目录
https://www.cnblogs.com/mq0036/p/8566427.html#a21(参考)

maven的打包方式
使用maven创建一个项目
jar包的几种制作方式_第13张图片
在IDEA控制台运行 mvn clean package(这条命令用到了maven的两个生命周期)

F:\2019IDEA\maven-test>mvn clean package
[INFO] Scanning for projects…
[INFO]
[INFO] ---------------------< com.test.maven:maven-test >----------------------
[INFO] Building maven-test 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] — maven-clean-plugin:3.1.0:clean (default-clean) @ maven-test —
[INFO]
[INFO] — maven-resources-plugin:3.1.0:resources (default-resources) @ maven-test —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] — maven-compiler-plugin:3.8.0:compile (default-compile) @ maven-test —
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to F:\2019IDEA\maven-test\target\classes
[INFO]
[INFO] — maven-resources-plugin:3.1.0:testResources (default-testResources) @ maven-test —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory F:\2019IDEA\maven-test\src\test\resources
[INFO]
[INFO] — maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ maven-test —
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] — maven-surefire-plugin:2.22.1:test (default-test) @ maven-test —
[INFO] No tests to run.
[INFO]
[INFO] — maven-jar-plugin:3.1.0:jar (default-jar) @ maven-test —
[INFO] Building jar: F:\2019IDEA\maven-test\target\maven-test-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.144 s
[INFO] Finished at: 2020-03-03T00:29:34+08:00
[INFO] ------------------------------------------------------------------------
F:\2019IDEA\maven-test>

maven打包方式,是利用了maven默认的生命周期和插件原理
maven 调用不同的插件完成不同的生命周期构建打包项目,上面的生命周期只是到打包

顺便了解maven的生命周期:
Maven 生命周期定义了各个构建环节的执行顺序,有了这个清单,Maven 就可以自动化的执行构建命令了。
Maven 有三套相互独立的生命周期,分别是:
①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
②Default Lifecycle 构建的核心部分,编译,测试,打包,安装,部署等等。
③Site Lifecycle 生成项目报告,站点,发布站点。
它们是相互独立的,你可以仅仅调用 clean 来清理工作目录,仅仅调用 site 来生成站点。当然你也可以直接运行 mvn clean install site 运行所有这三套生命周期。

重点说明一下:
1.maven定义了三个生命周期,它们各自相互独立
2.每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,Clean 生命周期由三个阶段构成,分别是
mvn pre-clean 阶段
mvn clean 阶段
mvn post-clean 阶段
只有后两个会清理mvn package打包出来的jar包

下面是maven定义的第二个生命周期
jar包的几种制作方式_第14张图片
由于我们平时项目里最常用的生命周期是前两个Clean Lifecycle,Default Lifecycle;所以maven第三个生命周期暂时不介绍
maven jar包内容结构
在这里插入图片描述

springboot的打jar包方式
springboot的打包方式是基于maven的,springboot提供了spring-boot-maven-plugin插件
插件定义如下:


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

    
        
            repackage
        
    


运行 mvn clean package 信息如下:

F:\2019IDEA\maven-test>mvn clean package
[INFO] Scanning for projects…
[WARNING]
[WARNING] Some problems were encountered while building the effective model for com.test.maven:maven-test:jar:1.0-SNAPSHOT
[WARNING] ‘build.plugins.plugin.version’ for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 66, column 21
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
[WARNING]
[INFO]
[INFO] ---------------------< com.test.maven:maven-test >----------------------
[INFO] Building maven-test 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] — maven-clean-plugin:2.5:clean (default-clean) @ maven-test —
[INFO] Deleting F:\2019IDEA\maven-test\target
[INFO]
[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ maven-test —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO]
[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ maven-test —
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to F:\2019IDEA\maven-test\target\classes
[INFO]
[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ maven-test —
[INFO] Using ‘UTF-8’ encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory F:\2019IDEA\maven-test\src\test\resources
[INFO]
[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ maven-test —
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] — maven-surefire-plugin:2.12.4:test (default-test) @ maven-test —
[INFO] No tests to run.
[INFO]
[INFO] — maven-jar-plugin:2.4:jar (default-jar) @ maven-test —
[INFO] Building jar: F:\2019IDEA\maven-test\target\maven-test-1.0-SNAPSHOT.jar
[INFO]
[INFO] — spring-boot-maven-plugin:2.1.1.RELEASE:repackage (default) @ maven-test —
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.977 s
[INFO] Finished at: 2020-03-03T00:55:52+08:00
[INFO] ------------------------------------------------------------------------
F:\2019IDEA\maven-test>

从maven第二个生命周期构建信息发现,在完成了maven自身的插件调用构建完后,再调用springboot提供的spring-boot-maven-plugin插件进行重打包
疑问?
为什么maven会调用springboot插件,是因为在pom文件中配置了springboot插件,凡是在pom文件配置了插件,maven在构建项目时都会调用插件干活,不同插件,在不懂阶段干不同的活

springboot jar包内容结构
在这里插入图片描述

你可能感兴趣的:(java基础)