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)。
 

核心作用

 
  1. 提供Java 编译器(javac):将.java源文件编译为 JVM 可执行的.class字节码文件;
  2. 提供Java 运行工具(java):启动 JVM,运行编译后的.class文件;
  3. 提供调试 / 打包工具:如javadoc(生成文档)、jar(打包 JAR 文件)、jdb(调试器)等;
  4. 提供Java 核心类库:如java.langjava.utiljava.io等,开发时直接引入即可使用;
  5. 提供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 的.class字节码文件、配置文件、资源文件(图片、字体)、第三方依赖等,后缀为.jar
 
简单说:JAR 是 Java 项目的「压缩包」,用于统一管理和分发 Java 程序 / 类库。
 

核心作用

 
  1. 精简文件:将多个.class文件、配置文件打包为单个 JAR,避免文件零散,便于分发和部署;
  2. 节省资源:压缩格式,减小文件体积,加快网络传输(如 Maven 仓库的依赖都是 JAR 包);
  3. 实现类库复用:将通用功能打包为 JAR(如工具类 JAR),其他项目直接引入即可使用,无需重复编写代码;
  4. 支持可执行:可将 Spring Boot 等项目打包为可执行 JAR,直接用java -jar运行,无需手动配置类路径;
  5. 包含元数据: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 是开发者与该技术 / 平台的「交互桥梁」。
 

核心作用

 
  1. 提供专属 API / 类库:封装了技术 / 平台的底层实现,开发者无需关注底层细节,直接调用 API 即可实现功能(如微信支付 SDK 封装了支付的网络请求、签名验证等);
  2. 提供专属开发工具:适配该技术 / 平台的编译、调试、打包、调试工具(如 Android SDK 的 adb、dx 工具);
  3. 降低开发成本:提供示例代码 + 开发文档,开发者可快速上手,无需重复造轮子;
  4. 保证兼容性:SDK 由技术 / 平台官方提供,确保开发的应用与该平台 / 技术的版本兼容;
  5. 提供测试 / 运行环境:部分 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 配置、依赖引入的关键步骤整理成一页可收藏的文档,需要吗?
posted @ 2026-02-02 14:14  hanease  阅读(19)  评论(0)    收藏  举报