JAVA是如何生成一个Jar文件并启动它的?
什么是Jar?
JAR 文件是一种基于流行的 ZIP 文件格式的文件格式,用于将多个文件聚合为一个文件。 JAR 文件本质上是一个包含可选 META-INF 目录的 zip 文件。可以通过命令行 jar 工具或使用 Java 平台中的java.util.jar
API 创建 JAR 文件。 JAR 文件的名称没有限制,可以是特定平台上的任何合法文件名。
使用较为初级的方式生成一个jar包
生成jar包的方式多种多样,我们可以选择使用Maven,使用Spring Boot等等,这次我们选择使用最纯粹的命令行的方式,来完成Java项目的打包过程。
创建一个纯粹的JAVA项目
我们先创建一个jar-demo的项目,整体项目结构如下
1 | jar-demo/ |
启动类代码简单输出些东西
1 | public class MainApp { |
配置MANIFEST.MF文件
简单配置下版本号和指定启动类
1 | Manifest-Version: 1.0 |
生成字节码文件
使用javac命令将源文件编译成字节码文件:
1 | javac -d out/classes src/com/btzx/*.java |
这行代码的意思是,编译指定文件下所有的.java文件并输出到”out/classes”目录下。
执行过命令后,我们的项目结构会变成下面这种格式:
1 | jar-demo/ |
通过jar命令生成jar包
接着,我们开始生成jar文件,执行如下命令来完成打包动作
1 | jar cvfm JarDemo.jar manifest/MANIFEST.MF -C out/classes/ . |
我们再来了解下各个参数的作用
c
创建一个新的jar文件v
生成详细输出f
指定生成的jar文件的名称,这里是指”JarDemo.jar”m
将 manifest 文件添加到 JAR 文件中-C
切换到指定目录并添加该目录下的文件到 JAR 文件中
这一步完了之后,项目结构会变成下面这个样子:
1 | jar-demo/ |
通过jar命令查看一下jar文件是否正常
生成jar文件后先不着急启动,我们对他查验一番,执行以下命令
1 | jar -tvf JarDemo.jar |
这种内容意味着我们生成的jar文件是没有问题的
1 | 0 Wed Jan 08 13:52:38 CST 2024 META-INF/ |
启动jar命令
如果上面操作都没有问题,那么这一步就可以睁开卡姿兰大眼睛来见证结果的诞生了。
还是执行命令:
1 | java -jar JarDemo.jar |
接着控制台会有以下输出,这也意味着我们的伟大胜利!
1 | Hello and welcome!i = 1 |
java启动jar文件原理
当我们在命令行中输入java -jar JarDemo.jar
时,Java 虚拟机(JVM)会首先读取 JAR 文件中的MANIFEST.MF
文件,通过这个文件的Main-Class属性就可以定位到我们程序的主类,接着JVM就会通过类加载器将主类以及需要加载的类和资源都加载到内存中,而一旦主类被加载,JVM就会执行主类中的main方法,整个 Java 应用程序的逻辑就会按照代码的编写顺序逐步执行。