跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Java JAR文件的打包与运行过程

目录什么是 JAR 文件?

使用 jar 命令创建 JAR 文件步骤 1:编写并编译 Java 代码步骤 2:创建清单文件步骤 3:创建 JAR 文件步骤 4:验证 JAR 文件内容运行 JAR 文件使用 Maven 创建 JAR 文件步骤 1:设置 Maven 项目步骤 2:配置 pom.xml步骤 3:包含依赖项(创建胖 JAR)

示例:添加依赖高级主题使用 Maven Shade 插件使用 jpackage 工具常见问题与注意事项总结在 Java 开发中,JAR(Java Archive)文件是一种核心的分发格式,用于将多个类文件、元数据和资源打包成一个压缩文件。JAR 文件不仅便于应用程序的部署,还可以通过配置清单文件(manifest)使其成为可执行文件。本文将深入探讨如何使用 JDK 的jar工具手动创建 JAR 文件,以及如何利用 Maven 自动化这一过程。我们将通过清晰的示例和步骤,确保内容深入浅出,为技术人员提供实用的指导。

本文的目标是帮助您:

理解 JAR 文件的作用和结构。

掌握使用jar工具创建可执行 JAR 文件的方法。

学习如何配置 Maven 以生成包含依赖的 JAR 文件。

了解高级工具(如jpackage)的潜在用途。

什么是 JAR 文件?

JAR 文件是基于 ZIP 和 ZLIB 压缩格式的归档文件,主要用于打包 Java 应用程序或库的组件,包括:类文件:编译后的.class文件,包含 Java 程序的字节码。

资源文件:如图片、配置文件或音频文件。

清单文件:位于META-INF/MANIFEST.MF,包含文件的元数据和属性。

JAR 文件的主要优势包括:高效分发:将所有相关文件打包为单一文件,便于传输。

压缩:减少文件大小,加快下载速度。

可执行性:通过指定Main-Class属性,JAR 文件可以直接运行。

模块化:自 JDK 9 起,JAR 文件支持模块化打包(模块化 JAR)。

使用 jar 命令创建 JAR 文件JDK 提供的jar工具是创建和操作 JAR 文件的标准工具。以下是通过命令行创建可执行 JAR 文件的步骤。

步骤 1:编写并编译 Java 代码假设我们有一个简单的 Java 程序HelloWorld.java,位于com.somedomainhere

包中:

package com.somedomainhere;

public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World of Java");}}

在命令行中,编译该文件:

javac com/somedomainhere/HelloWorld.java这将在com/somedomainhere目录下生成HelloWorld.class文件。

步骤 2:创建清单文件要使 JAR 文件可执行,需要一个清单文件来指定主类。创建一个名为manifest.stub

的文本文件,内容如下:

Main-Class: com.somedomainhere.HelloWorld注意:Main-Class属性区分大小写,且冒号后必须有一个空格。

文件必须以换行符结尾,否则可能导致解析错误。

步骤 3:创建 JAR 文件

假设当前目录结构如下:

.

└── com└── somedomainhere└── HelloWorld.class在包含com目录的根目录下,运行以下命令:jar cvmf manifest.stub hello.jar com/somedomainhere/HelloWorld.class

命令参数说明:

c:创建新的归档文件。

v:显示详细输出(verbose)。

m:包含指定的清单文件(manifest.stub)。

f:指定输出文件名(hello.jar)。

执行后,将生成hello.jar,其中包含正确的包结构(com/somedomainhere/HelloWorld.class)和清单文件。

步骤 4:验证 JAR 文件内容您可以使用以下命令查看 JAR 文件的内容:jar tf hello.jar

输出示例:

META-INF/

META-INF/MANIFEST.MF

com/

com/somedomainhere/

com/somedomainhere/HelloWorld.class运行 JAR 文件创建 JAR 文件后,可以通过以下命令运行:java -jar hello.jarjava -jar命令会读取清单文件中的Main-Class属性,并执行指定的主类。运行上述命令将输出:Hello, World of Java在支持的 GUI 平台(如 Windows、macOS 或某些 Linux 桌面环境)上,您可以双击 JAR 文件运行,前提是系统已将.jar文件关联到 Java 运行时环境(JRE)。

注意:确保已安装 Java 运行时环境(JRE)或 JDK。

如果 JAR 文件缺少Main-Class属性或主类不存在,将抛出异常。

使用 Maven 创建 JAR 文件对于大型项目,手动创建 JAR 文件可能效率低下。Maven 是一种流行的构建工具,可以自动化编译、打包和依赖管理。以下是如何使用 Maven 创建可执行 JAR 文件的步骤。

步骤 1:设置 Maven 项目创建一个标准的 Maven 项目,目录结构如下:hello-world/├── pom.xml└── src└── main└── java└── com└── somedomainhere└── HelloWorld.javaHelloWorld.java的内容与之前相同。

步骤 2:配置 pom.xml在pom.xml中,指定项目的基本信息和插件配置。以下是一个基本的配置,用于生成可执行 JAR 文件:4.0.0com.somedomainherehello-world1.0-SNAPSHOTjar

org.apache.maven.pluginsmaven-compiler-plugin3.8.11.81.8org.apache.maven.pluginsmaven-jar-plugin3.2.0com.somedomainhere.HelloWorld说明:jar:指定项目打包为 JAR 文件。

maven-compiler-plugin:设置 Java 编译版本(这里使用 Java 8)。

maven-jar-plugin:配置清单文件,指定主类。

运行以下命令生成 JAR 文件:mvn clean package这将在target目录下生成hello-world-1.0-SNAPSHOT.jar

。您可以运行:

java -jar target/hello-world-1.0-SNAPSHOT.jar步骤 3:包含依赖项(创建胖 JAR)

如果您的项目有外部依赖(如第三方库),上述 JAR 文件不包含这些依赖,运行时可能抛出ClassNotFoundException。要创建包含所有依赖的“胖 JAR”,可以使用maven-assembly-plugin。

在pom.xml

中添加以下插件配置:

org.apache.maven.pluginsmaven-assembly-plugin3.3.0jar-with-dependenciescom.somedomainhere.HelloWorldmake-assemblypackagesingle

运行以下命令:

mvn clean package这将生成两个 JAR 文件:target/hello-world-1.0-SNAPSHOT.jar:不包含依赖的普通 JAR。

target/hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar:包含所有依赖的胖 JAR。

运行胖 JAR:java -jar target/hello-world-1.0-SNAPSHOT-jar-with-dependencies.jar优点:胖 JAR 是自包含的,可以在任何安装了 Java 的环境中运行,无需额外配置类路径。

便于分发,适合独立应用程序。

注意:胖 JAR 可能显著增加文件大小,因为它包含所有依赖。

确保依赖的许可证允许这种打包方式。

示例:添加依赖假设您的程序使用 Apache Commons Lang 库。更新pom.xml

添加依赖:

org.apache.commonscommons-lang33.12.0修改HelloWorld.java

使用该库:

package com.somedomainhere;

import org.apache.commons.lang3.StringUtils;

public class HelloWorld {public static void main(String[] args) {String message = "hello, world of java";System.out.println(StringUtils.capitalize(message));}}重新运行mvn clean package,生成的胖 JAR 将包含 Commons Lang 库,运行时将输出:Hello, world of java高级主题使用 Maven Shade 插件虽然maven-assembly-plugin适用于大多数场景,但maven-shade-plugin提供了更高级的功能,如包重命名(shading)以避免类冲突。配置示例:org.apache.maven.pluginsmaven-shade-plugin3.4.1packageshadecom.somedomainhere.HelloWorld运行mvn clean package将生成包含所有依赖的 JAR 文件。Shade 插件特别适合需要处理复杂依赖冲突的项目。

使用 jpackage 工具自 Java 14 起,JDK 引入了jpackage工具,可创建平台特定的安装程序(如 Windows 的.exe或 macOS 的.dmg)。它将应用程序和 JRE 打包在一起,适合分发给非技术用户。

示例命令:

jpackage --input target --name HelloWorld --main-jar hello-world-1.0-SNAPSHOT.jar --main-class com.somedomainhere.HelloWorld由于jpackage超出了 JAR 文件的范围,建议有兴趣的读者参考Oracle 文档。

常见问题与注意事项问题解决方案java -jar 抛出 no main manifest attribute确保清单文件中包含 Main-Class 属性,或在 jar 命令中使用 -e 选项指定主类。

运行胖 JAR 时出现 ClassNotFoundException确认 maven-assembly-plugin 已正确配置,且所有依赖都包含在 JAR 中。

JAR 文件过大考虑使用普通 JAR 并通过类路径管理依赖,或检查是否有不必要的依赖。

双击 JAR 文件无法运行确保系统安装了 JRE,并将 .jar 文件关联到 javaw.exe。

总结打包和运行 JAR 文件是 Java 开发中的核心技能。通过jar工具,您可以手动创建简单的 JAR 文件,适合小型项目或学习目的。而 Maven 提供了强大的自动化功能,能够处理复杂的依赖管理和构建流程,使其成为现代 Java 开发的首选工具。本文通过详细的示例和配置,展示了从基础到高级的 JAR 文件管理方法。

无论您是初学者还是经验丰富的开发者,掌握这些技术将显著提高您的开发效率。建议进一步探索 Maven 的其他插件(如maven-shade-plugin)或jpackage工具,以满足更复杂的部署需求。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:把Java程序打包成jar文件包并执行的方法Java程序打包成带参数的jar文件实例代码java -jar命令详解之运行JAR文件、传递参数与性能调优idea插件之如何使用JarEditor编辑Java JAR文件Java实现Jar文件的遍历复制与文件追加Java创建可执行JAR文件的多种方式

相关文章