jar包的几种制作方式

本文深入解析Java项目的三种打包方式:普通Java项目、Maven项目及SpringBoot项目。详细阐述了IDEA工具打包流程、命令行制造jar包的过程,以及Maven生命周期和插件原理。特别介绍了SpringBoot如何基于Maven实现jar包的重打包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

jar包几种制作方式:

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

普通java项目打jar包方式
1.使用IDEA工具打包
首先创建一个普通java项目
在这里插入图片描述
IDEA打jar包流程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后构建
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
打开jar包
在这里插入图片描述

这里插入一张springboot嵌入tomcat包
在这里插入图片描述

(2)使用IDEA模仿spring一些jar包的内容
模仿如下:
在这里插入图片描述
在这里插入图片描述
打开test.jar包
在这里插入图片描述

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

maven的打包方式
使用maven创建一个项目
在这里插入图片描述
在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定义的第二个生命周期
在这里插入图片描述
由于我们平时项目里最常用的生命周期是前两个Clean Lifecycle,Default Lifecycle;所以maven第三个生命周期暂时不介绍
maven jar包内容结构
在这里插入图片描述

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

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<executions>
    <execution>
        <goals>
            <goal>repackage</goal>
        </goals>
    </execution>
</executions>
</plugin>

运行 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包内容结构
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值