上一篇
如何用Java运行JAR文件
- 后端开发
- 2025-06-17
- 4592
要使用Java文件创建JAR文件,先用javac编译.java为.class文件,再用jar命令打包,要使用JAR文件,在运行Java程序时通过-classpath选项添加JAR路径。
在Java开发中,JAR(Java Archive)文件是打包和分发Java应用程序的标准格式,它本质上是基于ZIP格式的压缩文件,包含编译后的.class
文件、资源文件及元数据,以下是详细的使用指南:
核心概念
- Java文件(.java)
- 人类可读的源代码文件,需编译为
.class
文件才能执行。
- 人类可读的源代码文件,需编译为
- JAR文件(.jar)
- 打包后的可执行单元,包含:
- 编译后的
.class
文件 - 依赖库(如其他JAR)
- 资源文件(图片、配置文件等)
META-INF/MANIFEST.MF
(清单文件,指定主类等信息)
- 编译后的
- 打包后的可执行单元,包含:
完整操作流程
步骤1:编写Java文件
// HelloWorld.java public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, JAR World!"); } }
步骤2:编译Java文件
javac HelloWorld.java # 生成 HelloWorld.class
步骤3:创建JAR文件
-
手动创建清单文件
新建manifest.txt
Main-Class: HelloWorld
️ 末尾必须空一行,且冒号后留空格。
-
打包命令
jar cvfm myapp.jar manifest.txt HelloWorld.class
c
:创建新JARv
:显示详细输出f
:指定JAR文件名m
:包含清单文件
步骤4:运行JAR
java -jar myapp.jar # 输出 Hello, JAR World!
进阶场景
场景1:打包多文件项目
假设项目结构:
src/
├─ Main.java
└─ utils/
└─ Tool.java
- 编译所有文件:
javac -d bin src/*.java src/utils/*.java
- 打包
bin
目录: jar cvfe app.jar Main -C bin .
-e
:直接指定主类(替代清单文件)
场景2:添加外部库
若需包含第三方JAR(如lib/gson.jar
):
- 编译时指定类路径:
javac -cp "lib/gson.jar" MyApp.java
- 运行JAR时加载依赖:
java -cp "myapp.jar:lib/gson.jar" Main
常见问题解决
-
"no main manifest attribute"
- 原因:清单文件未指定主类
- 修复:检查
Main-Class
格式或使用-e
参数打包。
-
ClassNotFoundException
- 原因:JAR内缺少类文件
- 检查:解压JAR查看内容
jar xf myapp.jar
-
资源文件读取失败
- 正确获取路径(避免绝对路径):
InputStream res = getClass().getResourceAsStream("/config.properties");
最佳实践
-
构建工具自动化
- 使用Maven/Gradle管理打包(示例Maven配置):
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
运行 mvn package
生成JAR。
-
验证JAR内容
jar tf myapp.jar # 列出所有文件
-
生成可执行JAR(含依赖)
工具推荐:
- Maven:
maven-assembly-plugin
- Gradle:
shadowJar
插件
引用说明
- Java官方文档:JAR文件指南
- Apache Maven项目:打包插件配置
- Gradle Shadow插件:创建Fat JAR
基于Java SE 17规范,适用于主流操作系统(Windows/macOS/Linux),操作前请确保已安装JDK并配置JAVA_HOME
环境变量。