jar包的几种制作方式

写本文章的目的,是回归最基础的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包内容结构
在这里插入图片描述

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Hive 是一个基于 Hadoop 的数据仓库系统,能够处理大规模的结构化数据。在 Hive 中使用自定义函数或者存储过程时,常常需要通过加载 jar 包来实现。以下三种方式是常用的 Hive 加载 jar 包的方式。 1. 添加 Hive AUX JARS 在 hive-site.xml 或者 hive-config.sh 中,通过配置 hive.aux.jars.path=xxxx 指定 jar 包存储的路径,最终将 jar 包添加到 Hadoop 的 ClassPath 中。当 Hive 运行需要加载 jar 包的任务时,就会从 ClassPath 中加载 jar 包,避免手动指定 JAR 文件。 2. ADD JAR 命令 使用 ADD JAR 命令将 jar 包添加到 Hive 会话中,可以通过全路径、本地路径或 Hadoop HDFS 路径来指定。例如 ADD JAR hdfs:///example/hive/hive-test.jar; 3. 使用命令行参数 启动 Hive 命令时,可以通过指定 –hiveconf hive.aux.jars.path=xxxx 指定 JAR 文件的路径,启动 Hive 命令同时就会将 JAR 文件加入到 ClassPath 中。 总之,在使用 Hive时,要根据实际情况选择合适的方式加载 JAR 包,避免出现错误。 ### 回答2: 在Hive中加载jar包有多种方式,以下列举其中三种: 1. 添加hive自定义类路径 在hive-site.xml文件中,将Hive的自定义类路径hive.aux.jars.path设置成需要加载的jar包所在路径,即可将jar包加入Hive的classpath中,方便调用自定义函数等操作。示例: <property> <name>hive.aux.jars.path</name> <value>/path/to/jar1:/path/to/jar2</value> </property> 2. 使用ADD JAR命令 在Hive的交互式终端或执行脚本时,使用ADD JAR命令将需要加载的jar包添加到Hive的classpath中。该命令会将jar包复制到Hive的临时文件夹中,可以通过system:java.io.tmpdir查看该路径。示例: ADD JAR /path/to/jar1; ADD JAR /path/to/jar2; 3. 在创建自定义函数时指定jar包路径 在创建自定义函数时,可以将需要加载的jar包路径直接指定到函数的CLASSPATH选项中。示例: CREATE TEMPORARY FUNCTION my_func AS 'com.package.MyFunc' USING JAR '/path/to/jar1'; 以上三种方式中,第一种和第二种可以将jar包持久地添加到Hive的classpath中,方便后续多个脚本或交互式终端使用;第三种方式则适用于只在当前会话使用自定义函数的情况。 ### 回答3: Hive 是一个基于 Hadoop 的数据仓库工具,它可以将结构化的数据以 SQL 的方式进行查询和分析。在 Hive 中,用户可以使用自定义的 UDF(用户定义函数),以扩展 Hive 的功能。 说到加载 Jar 包,Hive 有以下几种方式: 1. ADD JAR:通过 ADD JAR 命令将本地路径的 Jar 包加载到 Hive 中。 例如: ADD JAR /usr/local/hive/UDF/hive-udf.jar; 2. ADD ARCHIVE:通过 ADD ARCHIVE 命令将一个包含多个 Jar 包的 tar.gz 归档文件加载到 Hive 中。 例如: ADD ARCHIVE /usr/local/hive/UDF/hive-udf.tar.gz; 3. 在 Hive 配置文件中添加 Jar 包路径:在 Hive 的配置文件中,添加 Jar 包所在的路径,如下: hive.aux.jars.path=file:///usr/local/hive/UDF/hive-udf.jar 4. 使用命令行选项 "-hiveconf":在启动 Hive 前,使用 -hiveconf 命令行选项指定 Jar 包路径。 例如: $ hive -hiveconf hive.aux.jars.path=file:///usr/local/hive/UDF/hive-udf.jar 以上是 Hive 加载 Jar 包的几种方式,根据不同的需求,选择合适的方式即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值