jdk-jar和sdk的使用
JDK、JAR、SDK 的作用与使用方式(核心区别 + 实战用法)
三者是 Java 开发 / 软件研发中不同维度的核心概念,无直接归属关系,但配合使用是开发的基础:JDK 是 Java 开发的核心环境,JAR 是 Java 的文件打包格式,SDK 是某类技术 / 平台的通用开发工具包(JDK 本质是 Java 语言的专属 SDK)。
下面从核心定义、核心作用、使用方式、典型场景四个维度拆解,结合 Java 开发实战讲清差异和配合用法。
一、JDK(Java Development Kit):Java 开发的「基础运行 + 开发环境」
核心定义
JDK 是Java 语言专属的开发工具包,也是 Java 的SDK(Java SDK 就是 JDK),包含了运行 Java 程序的JRE(Java 运行环境) + 开发 Java 程序的核心工具(编译器、调试器等)+ Java 核心类库(API)。
简单说:开发 Java 程序必须装 JDK,运行 Java 程序可仅装 JRE(JDK 已包含 JRE)。
核心作用
- 提供Java 编译器(javac):将
.java源文件编译为 JVM 可执行的.class字节码文件; - 提供Java 运行工具(java):启动 JVM,运行编译后的
.class文件; - 提供调试 / 打包工具:如
javadoc(生成文档)、jar(打包 JAR 文件)、jdb(调试器)等; - 提供Java 核心类库:如
java.lang、java.util、java.io等,开发时直接引入即可使用; - 提供JRE 运行环境:包含 JVM、核心类库的运行时版本,无需单独安装 JRE。
关键分类(按使用场景)
| 分类 | 作用 | 适用场景 |
|---|---|---|
| JDK(开发版) | 含编译 / 开发 / 运行工具 + 类库 | 本地开发(IDEA/Eclipse)、项目编译打包 |
| JRE(运行版) | 仅含 JVM + 运行时类库,无开发工具 | 生产环境仅运行 Java 程序(减少资源占用) |
| JRE Lite(轻量运行版) | 裁剪后的 JRE,仅保留核心运行能力 | 嵌入式设备、微服务容器(如 Docker) |
常用使用方式
1. 本地开发(IDEA/Eclipse)
- 下载对应版本 JDK(如 JDK8、JDK17,推荐 LTS 长期支持版),安装并配置系统环境变量(
JAVA_HOME指向 JDK 安装目录,Path添加%JAVA_HOME%\bin); - 在 IDE 中配置 JDK:IDEA→File→Project Structure→Project SDK,选择安装的 JDK 版本,后续开发 / 编译 / 运行由 IDE 自动调用 JDK 工具。
2. 命令行操作(基础)
bash
运行
# 1. 编译.java源文件(生成.class文件)
javac HelloWorld.java
# 2. 运行编译后的.class文件(无需加.class后缀)
java HelloWorld
# 3. 查看JDK版本(验证安装成功)
java -version
javac -version
3. 生产环境使用
- 若项目打包为JAR 包,生产环境需安装 JRE/JDK,直接用
java -jar xxx.jar运行(JDK 自带java命令); - 若用容器部署(Docker),可基于轻量 JRE 镜像(如
openjdk:17-jre-slim),减少镜像体积。
核心特点
- 与 Java 版本强绑定(如 JDK8 兼容 Java8 语法,JDK17 支持新特性如密封类、模式匹配);
- 跨平台:Windows/Linux/Mac 均有对应版本,一次编写到处运行的核心基础;
- 必须配置
JAVA_HOME:大部分 Java 框架(Spring Boot、Maven)会自动读取JAVA_HOME找到 JDK。
二、JAR(Java Archive):Java 的「文件打包格式」
核心定义
JAR 是 Java 的压缩归档文件格式,本质是一个zip 压缩包(可直接用解压软件打开),专门用于打包 Java 的
简单说:JAR 是 Java 项目的「压缩包」,用于统一管理和分发 Java 程序 / 类库。
.class字节码文件、配置文件、资源文件(图片、字体)、第三方依赖等,后缀为.jar。
核心作用
- 精简文件:将多个
.class文件、配置文件打包为单个 JAR,避免文件零散,便于分发和部署; - 节省资源:压缩格式,减小文件体积,加快网络传输(如 Maven 仓库的依赖都是 JAR 包);
- 实现类库复用:将通用功能打包为 JAR(如工具类 JAR),其他项目直接引入即可使用,无需重复编写代码;
- 支持可执行:可将 Spring Boot 等项目打包为可执行 JAR,直接用
java -jar运行,无需手动配置类路径; - 包含元数据:JAR 包内默认包含
META-INF目录(含MANIFEST.MF文件),记录 JAR 的版本、主类、依赖等信息。
关键分类(按使用场景)
| 分类 | 核心特点 | 适用场景 |
|---|---|---|
| 普通 JAR | 仅打包.class 和资源文件,无主类 | 通用类库(如工具类、自定义组件),供其他项目依赖 |
| 可执行 JAR | 含MANIFEST.MF,指定主类(Main-Class) |
独立运行的 Java 程序(如 Spring Boot 项目) |
| 模块化 JAR(Module JAR) | 基于 Java9 + 模块化,含module-info.class |
模块化 Java 项目,实现类库隔离 |
| 签名 JAR | 经过数字签名,保证 JAR 的完整性和安全性 | 生产环境敏感项目,防止 JAR 被篡改 |
常用使用方式
1. 手动打包 JAR(命令行,jar工具是 JDK 自带的)
bash
运行
# 1. 打包普通JAR(将当前目录下的所有.class和资源文件打包为demo.jar)
jar -cvf demo.jar ./
# 2. 打包可执行JAR(指定主类,主类需包含main方法)
jar -cvfe app.jar com.demo.App ./
# 说明:参数含义 -c(创建) -v(显示过程) -f(指定JAR名) -e(指定主类)
2. IDEA 打包 JAR(开发常用)
- 普通 JAR:IDEA→File→Project Structure→Artifacts→+→JAR→From modules with dependencies→选择模块和输出目录,Build→Build Artifacts 即可;
- Spring Boot 可执行 JAR:直接用 Maven/Gradle 插件(
spring-boot-maven-plugin),执行mvn clean package,target 目录下生成的 JAR 即为可执行 JAR。
3. 运行可执行 JAR(核心,生产环境常用)
bash
运行
# 直接运行(Spring Boot项目核心启动命令)
java -jar your-project.jar
# 带JVM参数运行(如配置内存)
java -Xms512m -Xmx1024m -jar your-project.jar
4. 引入 JAR 依赖(其他项目使用)
- 手动引入:将 JAR 包复制到项目的
lib目录,IDEA 中右键 JAR→Add as Library,IDE 自动添加到类路径; - Maven/Gradle 引入:将 JAR 发布到 Maven 仓库(本地 / 私服 / 中央),在
pom.xml/build.gradle中添加依赖坐标,自动下载并引入。
核心特点
- 本质是 zip 压缩包,可直接解压(重命名为.zip 即可);
- 跨平台:JAR 中的
.class是字节码,可在任何装有 JRE/JDK 的平台运行; - Spring Boot 的可执行 JAR 是胖 JAR:包含项目自身代码 + 所有第三方依赖 + 内嵌 Tomcat/Jetty,无需单独部署服务器。
三、SDK(Software Development Kit):某技术 / 平台的「通用开发工具包」
核心定义
SDK 是软件开发工具包的通用统称,是某一门语言、某一个技术平台、某一个硬件设备为了方便开发者进行二次开发,提供的全套开发资源集合,通常包含:核心 API / 类库 + 开发工具(编译器 / 调试器 / 打包工具) + 开发文档 + 示例代码 + 运行环境等。
简单说:想开发某类技术 / 平台的应用,必须用对应的 SDK,SDK 是开发者与该技术 / 平台的「交互桥梁」。
核心作用
- 提供专属 API / 类库:封装了技术 / 平台的底层实现,开发者无需关注底层细节,直接调用 API 即可实现功能(如微信支付 SDK 封装了支付的网络请求、签名验证等);
- 提供专属开发工具:适配该技术 / 平台的编译、调试、打包、调试工具(如 Android SDK 的 adb、dx 工具);
- 降低开发成本:提供示例代码 + 开发文档,开发者可快速上手,无需重复造轮子;
- 保证兼容性:SDK 由技术 / 平台官方提供,确保开发的应用与该平台 / 技术的版本兼容;
- 提供测试 / 运行环境:部分 SDK 包含模拟环境(如微信开发者工具、Android 模拟器),无需真实设备即可开发测试。
关键分类(按适用范围)
| 分类 | 典型示例 | 核心用途 |
|---|---|---|
| 语言专属 SDK | JDK(Java SDK)、Python SDK、Go SDK | 开发对应语言的程序,提供语言核心工具和类库 |
| 平台专属 SDK | Android SDK、iOS SDK、Windows SDK | 开发对应操作系统 / 移动平台的应用(如 APP) |
| 第三方服务 SDK | 微信支付 SDK、阿里云 OSS SDK、钉钉开放平台 SDK | 对接第三方平台的服务(支付、存储、消息推送等) |
| 硬件设备 SDK | 摄像头 SDK、打印机 SDK、物联网设备 SDK | 开发与硬件设备交互的程序(如设备控制、数据采集) |
常用使用方式(以第三方服务 SDK为例,Java 开发最常用)
步骤 1:获取 SDK
- 官方下载:从技术 / 平台官方网站下载 SDK 包(如 JAR、源码);
- 仓库引入:大部分 SDK 已发布到 Maven/Gradle 中央仓库,直接添加依赖坐标即可(推荐)。
步骤 2:引入 SDK 到项目
示例:阿里云 OSS SDK(Java 版),Maven 引入
xml
<!-- 在pom.xml中添加依赖坐标,自动下载SDK JAR包 -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.18.0</version>
</dependency>
步骤 3:调用 SDK API 实现功能
java
运行
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
public class OssDemo {
public static void main(String[] args) {
// 1. 配置SDK参数(官方提供的AccessKey、Endpoint)
String endpoint = "https://oss-cn-beijing.aliyuncs.com";
String accessKeyId = "你的AccessKeyId";
String accessKeySecret = "你的AccessKeySecret";
String bucketName = "你的存储空间名";
// 2. 初始化SDK客户端(官方API)
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
// 3. 调用SDK API实现功能(如判断存储空间是否存在)
boolean exists = ossClient.doesBucketExist(bucketName);
System.out.println("存储空间是否存在:" + exists);
// 4. 关闭客户端(SDK推荐)
ossClient.shutdown();
}
}
步骤 4:测试 / 调试
- 本地开发:使用 SDK 提供的测试环境 / 模拟工具(如阿里云 OSS 的测试存储空间);
- 生产环境:替换为正式参数(如正式 AccessKey、正式 Endpoint),直接部署即可。
核心特点
- 通用性:是所有开发工具包的统称,JDK、Android SDK 等都是 SDK 的具体实现;
- 专属型:某一个 SDK 仅适用于对应的技术 / 平台,无法跨平台使用(如 Android SDK 无法开发 iOS 应用);
- 迭代性:随技术 / 平台的更新而迭代,开发者需使用对应版本的 SDK(如微信支付 SDKv3 不兼容 v2);
- 易用性:封装底层复杂逻辑,提供高抽象的 API,降低开发门槛。
四、JDK、JAR、SDK 的核心区别与关联
1. 核心区别(一句话总结)
- SDK:通用概念,是某技术 / 平台的「开发工具箱」,JDK 是其Java 语言专属实现;
- JDK:具体工具包,是 Java 语言的 SDK,提供 Java 开发 / 运行的所有核心能力;
- JAR:文件格式,是 Java 的「压缩包」,用于打包 Java 程序 / 类库,是 JDK/SDK 的产物 / 使用载体。
2. 三者核心关联(Java 开发实战流程)
plaintext
1. 安装JDK(Java的SDK)→ 配置开发环境(IDEA)
2. 开发Java程序 → 引入第三方SDK(如阿里云OSS SDK,以JAR包形式存在)
3. 用JDK的javac工具编译源文件 → 生成.class字节码文件
4. 用JDK的jar工具/Maven插件 → 将.class文件+SDK依赖+配置文件打包为JAR包(普通JAR/可执行JAR)
5. 生产环境:用JDK/JRE的java工具 → 运行可执行JAR包,程序中调用第三方SDK的API实现业务功能
五、高频易混点答疑
1. JDK 就是 Java SDK 吗?
是。JDK 的全称是 Java Development Kit,本质就是 Java 语言的软件开发工具包,所以 Java SDK 就是 JDK,二者完全等价。
2. JAR 包和 SDK 的关系?
SDK 是开发工具包,JAR 是文件格式;大部分 Java 版 SDK 的最终形态是 JAR 包(如阿里云 OSS SDK、MyBatis SDK),开发者通过引入 SDK 的 JAR 包,调用其中的 API 实现功能。
3. 为什么 Spring Boot 项目打包为 JAR 后可直接运行?
因为 Spring Boot 的 JAR 是可执行 JAR,其
META-INF/MANIFEST.MF文件中指定了主类(如org.springframework.boot.loader.JarLauncher),且 JDK 的java -jar命令会自动读取该文件,启动主类并加载 JAR 内的所有依赖和资源。4. 开发时需要装 SDK 还是 JDK?
- 开发 Java 程序:装 JDK 即可(JDK 是 Java 的 SDK);
- 开发 Java + 第三方服务(如微信支付、阿里云):装 JDK + 引入对应第三方 SDK(JAR 包);
- 开发 Android 应用:装 Android SDK(包含 Java 开发环境、Android 专属工具和类库)。
5. JRE 和 JDK 的选择?
- 开发环境:必须装 JDK(需要编译工具 javac、打包工具 jar 等);
- 生产环境:仅运行 Java 程序时,装 JRE 即可(体积更小,节省服务器资源);若需要执行
java -jar,JRE 和 JDK 都可以(JDK 包含 JRE)。
我可以帮你整理JDK/JAR/SDK 的核心用法速查表,把命令行操作、IDE 配置、依赖引入的关键步骤整理成一页可收藏的文档,需要吗?

浙公网安备 33010602011771号