jar包简介
JAR(Java Archive)是一种包文件格式,通常用于将许多 Java class文件和相关元数据及资源(文本、图像等)聚合到一个文件中,应用程序就可以直接依赖jar包,方便在 Java 平台上发布应用软件或库。
JAR 文件的存在的原因
- 组织和分发: JAR 文件提供了一种组织和分发 Java 程序的方式。它可以包含类文件、资源文件、库文件(例如第三方库或依赖的 JAR 文件)等,将这些文件打包在一个单独的文件中,便于传输、存储和共享。
- 模块化: JAR 文件可以作为 Java 应用程序的模块,帮助实现模块化的代码结构。通过将相关的类和资源组织在一个 JAR 文件中,可以更容易地管理应用程序的结构和依赖关系。
- 可执行 JAR 文件: JAR 文件中的 MANIFEST.MF 文件可以包含关于 JAR 文件的元数据(META-INF/MENIFEST.MF),其中包括指定程序入口的信息。这使得可以创建包含主类信息的可执行 JAR 文件,直接通过 java -jar 命令运行。
JAR 文件的内容
- 字节码文件: JAR 文件中包含了编译后的 Java字节码文件,这些文件被组织成目录结构,反映了它们在包中的包名和类名。
- 资源文件: 除了类文件外,JAR 文件还可以包含任意类型的资源文件,例如配置文件、图像、文本文件等。
- META-INF 目录: JAR 文件中的 META-INF 目录包含了一些元数据信息,其中最常见的是 MANIFEST.MF 文件。MANIFEST.MF 文件包含了关于 JAR 文件的元信息,包括版本、作者、入口点(main函数)等。
- 库文件: JAR 文件中可以包含其他 JAR 文件,通常用于包含项目所依赖的第三方库。这有助于简化项目的依赖管理。
通过将所有这些文件打包在一个 JAR 文件中,开发者可以方便地将整个应用程序或模块分发给其他开发者或用户,确保了项目的一致性和易于管理。 JAR 文件在 Java 生态系统中广泛应用,尤其是在构建和部署 Java 应用程序时。
jar不仅仅只能表示库文件,也能表示运行程序,可以看到jar的类型是“Executable Jar File”
jar包的结构
TIPS:包名和jar包中的路径名是匹配的
源代码中的package就是跟代码的存放路径有关:
MANIFEST文件内容
该manifest文件中没有写明main-class(入口点),所以没法执行。
如何从java文件到JAR
将 Java 源代码文件打包成 JAR(Java Archive)文件通常是通过 Java 的打包工具 jar 来完成的。以下是一些常见的步骤:
-
编写 Java 源代码:
- 使用文本编辑器或集成开发环境(IDE)编写 Java 源代码。
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
-
编译 Java 源代码:
- 使用 Java 编译器(通常是 javac 命令)将 Java 源代码编译成字节码文件(.class 文件)。
javac YourJavaFile.java
-
创建清单文件(Manifest File):
- 创建一个包含 JAR 文件的清单文件MANIFEST.MF,清单文件描述了 JAR 文件的结构和元信息。可以手动创建清单文件,也可以使用默认的清单文件。
Manifest-Version: 1.0 Main-Class: HelloWorld
其中,HelloWorld是包含 main 方法的主类(入口点),如果是有包名的话,需要带上包名。
-
使用 jar 命令创建 JAR 文件:
- 在命令行中使用 jar 命令将编译后的字节码文件和清单文件打包成 JAR 文件。
jar cvmf MANIFEST.MF HelloWorld.jar -C YourClassFilesDirectory
YourClassFilesDirectory 是包含编译后的 .class 文件的目录。
- 如果只有一个文件(HelloWorld.class),就可以直接
jar cvmf MANIFEST.MF HelloWorld.jar HelloWorld.class
- 如果使用默认的清单文件,可以省略 -m 参数:
jar cvf YourJarFile.jar -C YourClassFilesDirectory
-
验证 JAR 文件:
- 可以使用 jar 命令验证创建的 JAR 文件:
jar tf HelloWorld.jar
这将列出 JAR 文件中包含的所有文件:
-
执行jar文件:
通过这些步骤,你就可以将 Java 源代码文件打包成 JAR 文件,方便分发和执行。