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

jar包几种制作方式:

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

普通java项目打jar包方式

1.使用IDEA工具打包

首先创建一个普通java项目

怎么打jar包上传到hadoop jar打包方式_jar包


IDEA打jar包流程

怎么打jar包上传到hadoop jar打包方式_spring_02


怎么打jar包上传到hadoop jar打包方式_spring_03


怎么打jar包上传到hadoop jar打包方式_maven_04


怎么打jar包上传到hadoop jar打包方式_怎么打jar包上传到hadoop_05


然后构建

怎么打jar包上传到hadoop jar打包方式_怎么打jar包上传到hadoop_06


怎么打jar包上传到hadoop jar打包方式_spring_07

怎么打jar包上传到hadoop jar打包方式_maven_08


打开jar包

怎么打jar包上传到hadoop jar打包方式_怎么打jar包上传到hadoop_09

这里插入一张springboot嵌入tomcat包

怎么打jar包上传到hadoop jar打包方式_jar包_10

(2)使用IDEA模仿spring一些jar包的内容

模仿如下:

怎么打jar包上传到hadoop jar打包方式_spring_11


怎么打jar包上传到hadoop jar打包方式_jar包_12


打开test.jar包

怎么打jar包上传到hadoop jar打包方式_怎么打jar包上传到hadoop_13

2.使用命令行,自己制造jar包,麻烦的是自己首先要编译好,安排好目录
(参考)

maven的打包方式

使用maven创建一个项目

怎么打jar包上传到hadoop jar打包方式_spring_14


在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包上传到hadoop jar打包方式_maven_15


由于我们平时项目里最常用的生命周期是前两个Clean Lifecycle,Default Lifecycle;所以maven第三个生命周期暂时不介绍

maven jar包内容结构

怎么打jar包上传到hadoop jar打包方式_maven_16

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包内容结构

怎么打jar包上传到hadoop jar打包方式_spring_17