JDK安装及JRE说明

张开发
2026/4/15 1:48:23 15 分钟阅读

分享文章

JDK安装及JRE说明
文章目录一、JDK下载和安装二、配置环境变量三、安装成功验证四、JDK和JRE一、核心定义与功能定位二、组成结构对比1. JDK的组成2. JRE的组成三、关键差异分析四、典型使用场景1. JDK的使用场景2. JRE的使用场景五、版本兼容性规则六、现代开发中的选择建议七、常见误区澄清五、移除了独立的 JRE 文件夹一、移除 JRE 的核心原因二、关键版本节点三、用户如何适配四、常见问题解答六、不设置JAVA_HOME变量可以吗一、不设置 JAVA_HOME 的可行性二、不设置 JAVA_HOME 的潜在问题三、何时可以省略 JAVA_HOME四、最佳实践建议**总结**一、JDK下载和安装JDK下载地址选择适合 JDK 版本本文选择JDK 23在Windows x64环境下安装 x64 Installer。建议普通用户选择 x64 Installer简便、快速。开发者或需要灵活控制安装位置的用户选择 x64 Compressed Archive需要手动设置环境变量。IT 管理员或批量部署选择 x64 MSI Installer适合批量安装和企业环境。安装 JDK安装路径D:\JDK二、配置环境变量三、安装成功验证四、JDK和JREJDKJava Development Kit和JREJava RuntimeEnvironment是Java生态系统中两个核心组件它们在功能定位、组成结构和使用场景上有显著区别。以下是详细对比分析一、核心定义与功能定位组件全称功能定位JDKJava Development Kit面向开发者的完整工具包包含编译、调试、运行Java程序所需的所有工具JREJava Runtime Environment面向终端用户的运行时环境仅提供运行已编译Java程序所需的核心组件二、组成结构对比1. JDK的组成核心工具链javacJava编译器将.java文件编译为.class字节码javaJava解释器运行.class文件javadoc生成API文档工具jar打包工具创建/管理JAR文件jdb调试工具开发库Java基础类库如java.lang、java.util等开发工具包如javax.tools、com.sun.source等运行时环境包含JRE的所有组件JVM、核心类库等2. JRE的组成JVMJava Virtual Machine执行字节码的核心引擎包含垃圾回收器GC、即时编译器JIT等核心类库java.lang基础类型、对象模型java.io输入输出流java.net网络编程java.util集合框架、日期时间等其他组件字符集转换库基础数学库三、关键差异分析维度JDKJRE目标用户Java开发者Java程序运行者如终端用户包含内容开发工具 JRE仅JVM 核心类库磁盘占用较大约400MB较小约150MB功能范围编译、调试、运行、文档生成仅运行已编译程序更新频率与Java版本同步更新每6个月通常随JDK更新但用户可单独升级四、典型使用场景1. JDK的使用场景开发Java应用# 编译Java程序javac HelloWorld.java# 运行Java程序javaHelloWorld构建工具集成Maven/Gradle依赖JDK的javac进行编译IDE如IntelliJ IDEA、Eclipse需要JDK提供调试支持学习Java编程初学者需安装JDK以使用javac和java命令2. JRE的使用场景运行Java应用用户双击JAR文件或通过命令行启动java-jarmyapp.jar服务器部署Tomcat等应用服务器仅需JRE即可运行Web应用嵌入式设备智能卡、IoT设备等资源受限环境仅部署JRE五、版本兼容性规则向下兼容性高版本JRE可运行低版本编译的字节码如JRE 17可运行JDK 8编译的代码但可能因类库变更导致运行时错误如使用JDK 17新增的API在JRE 8中不存在模块化影响JDK 9JDK 9引入的模块系统可能限制反射访问需通过--add-opens参数显式开放模块示例java--add-opens java.base/java.langALL-UNNAMED-jarmyapp.jar六、现代开发中的选择建议开发者环境始终安装最新LTS版本的JDK如JDK 17或JDK 21使用构建工具如Maven管理依赖版本生产环境服务器部署JRE或精简版JDK如jlink创建的自定义运行时示例创建仅包含必要模块的JREjlink --add-modules java.base,java.sql--outputmyjre容器化部署使用官方JRE镜像如eclipse-temurin:17-jre-jammy示例DockerfileFROM eclipse-temurin:17-jre-jammy COPY target/myapp.jar /app/ CMD [java, -jar, /app/myapp.jar]七、常见误区澄清“安装JDK后不需要单独安装JRE”正确JDK已包含JRE但某些场景如仅需运行环境可单独安装JRE以节省空间“JRE包含开发工具”错误JRE仅包含运行时组件开发工具如javac必须通过JDK获取“所有Java程序都需要JDK才能运行”错误仅需JRE即可运行已编译程序除非程序动态调用编译API如通过javax.tools.ToolProvider通过理解JDK与JRE的差异开发者可以更精准地配置开发环境运维人员也能优化生产环境的资源占用。在云原生时代结合jlink和容器化技术可以进一步实现Java运行时的轻量化部署。五、移除了独立的 JRE 文件夹JDK 从 9 版本开始移除了独立的 JRE 文件夹并在后续版本如 JDK 11、JDK 17中彻底取消了内置 JRE 的设计仅提供统一的 JDK 下载包。以下是具体原因和背景一、移除 JRE 的核心原因模块化系统JPMS的引入JDK 9 引入了Java 模块系统Project Jigsaw将 JDK 和 JRE 的组件拆分为可组合的模块如java.base、java.desktop。用户可以根据需求按需加载模块无需安装完整的 JRE从而减少冗余组件。简化发行版结构JRE 本质是 JDK 的子集仅包含运行时所需的核心文件。Oracle 希望通过统一 JDK 结构减少安装包体积和目录层级避免用户混淆开发环境JDK和运行环境JRE。适应云原生和轻量化部署随着容器化、微服务的普及传统庞大的 JRE约 150-200MB已无法满足需求。通过jlink工具用户可以生成仅包含必要模块的轻量级运行时镜像最小可压缩至 15-25MB显著提升启动速度和资源利用率。二、关键版本节点JDK 92017 年发布首次引入模块化系统允许用户通过jlink生成自定义运行时但未完全移除 JRE 文件夹仍可通过特定方式生成。JDK 10/112018 年发布逐步收敛目录结构主流 OpenJDK 发行版如 AdoptOpenJDK开始默认不包含 JRE 文件夹。JDK 172021 年发布LTS 版本Oracle 及主流发行版如 Eclipse Temurin、Amazon Corretto彻底移除jre/子目录JDK 本身即成为“全功能运行时”bin/java命令直接依赖lib/modules中的模块化镜像。三、用户如何适配直接使用 JDK 运行程序JDK 17 的bin/java命令已内置运行时能力无需额外jre/目录。配置环境变量时只需指向 JDK 根目录如JAVA_HOME/path/to/jdk-17并在Path中添加%JAVA_HOME%/bin。通过jlink生成轻量级运行时若需精简部署如容器化场景可使用以下命令生成仅包含必要模块的运行时jlink --module-path$JAVA_HOME/jmods\--add-modules java.base,java.logging\--outputmy-runtime生成的my-runtime目录体积可缩小至原 JDK 的 40% 以下。采用第三方 JRE 替代方案部分社区提供兼容 Java SE 标准的运行时实现如 Eclipse Temurin、Azul Zulu但这些发行版也遵循模块化设计不再单独分发 JRE。四、常见问题解答Q为什么 JDK 17 安装后没有jre文件夹A自 JDK 9 起Oracle 逐步移除独立 JREJDK 17 彻底取消了该结构。JDK 本身已包含所有运行时组件bin/java可直接启动程序。Q旧脚本或 IDE 报错JAVA_HOME/jre/bin/java找不到怎么办A将脚本或 IDE 配置中的路径更新为JAVA_HOME/bin/java并确保JAVA_HOME指向 JDK 根目录。Q是否需要重新下载 JREA无需单独下载 JREJDK 17 已满足开发和运行需求。若需轻量级运行时使用jlink生成即可。六、不设置JAVA_HOME变量可以吗不设置JAVA_HOME环境变量是可以运行 Java 程序的但可能会影响某些工具、开发环境或脚本的正常工作。以下是详细分析一、不设置JAVA_HOME的可行性直接运行 Java 程序如果通过绝对路径调用java命令如/path/to/jdk-17/bin/java MyApp或已将 JDK 的bin目录添加到系统的PATH环境变量中则可以直接运行java -version或启动程序无需依赖JAVA_HOME。示例# 假设 JDK 安装在 /opt/jdk-17exportPATH/opt/jdk-17/bin:$PATH# 临时添加到 PATHjava-version# 直接运行依赖PATH的工具大多数命令行工具如 Maven、Gradle会通过PATH查找java命令而非直接依赖JAVA_HOME。只要java在PATH中这些工具通常能正常工作。二、不设置JAVA_HOME的潜在问题开发工具和 IDE 的依赖IntelliJ IDEA/Eclipse需要JAVA_HOME指定 JDK 路径以编译和运行项目。若未设置可能报错或无法识别 JDK。Visual Studio Code通过扩展如Extension Pack for Java调用 JDK 时通常需要JAVA_HOME或手动配置路径。构建工具的默认行为Maven优先通过JAVA_HOME查找 JDK。若未设置可能回退到PATH中的java但某些插件如maven-compiler-plugin可能依赖JAVA_HOME确定编译版本。Gradle类似 Maven部分任务如javaexec可能依赖JAVA_HOME。脚本和第三方工具的兼容性许多脚本如启动服务、部署工具会通过JAVA_HOME定位 JDK。若未设置可能导致脚本失败或误用系统其他版本的 Java。多 JDK 版本切换困难若系统安装多个 JDK如 JDK 8 和 JDK 17不设置JAVA_HOME时工具可能默认使用PATH中第一个找到的java导致版本混乱。通过JAVA_HOME可以显式指定版本。三、何时可以省略JAVA_HOME仅运行简单命令行程序如果仅通过java -jar MyApp.jar运行程序且不依赖构建工具或 IDE可以省略JAVA_HOME前提是java在PATH中。容器化环境在 Docker 或 Kubernetes 中通常通过绝对路径调用java如ENTRYPOINT [/opt/jdk-17/bin/java, -jar, app.jar]无需JAVA_HOME。使用包装工具工具如jpackagerJDK 14或jlink生成的自定义运行时已包含所有依赖无需外部JAVA_HOME。四、最佳实践建议始终设置JAVA_HOME为避免潜在问题建议在系统环境变量中配置JAVA_HOME并指向当前使用的 JDK 目录如C:\Program Files\Java\jdk-17或/usr/lib/jvm/jdk-17。Windowssetx JAVA_HOME C:\Program Files\Java\jdk-17 setx PATH %JAVA_HOME%\bin;%PATH%Linux/macOS在~/.bashrc或~/.zshrc中添加exportJAVA_HOME/opt/jdk-17exportPATH$JAVA_HOME/bin:$PATH验证配置运行以下命令检查是否生效echo$JAVA_HOME# Linux/macOSecho%JAVA_HOME%# Windowsjava-version多版本管理使用工具如jenvmacOS/Linux或SDKMAN!跨平台管理多个 JDK 版本自动切换JAVA_HOME。总结场景是否需要JAVA_HOME直接运行java命令❌ 否需PATH使用 Maven/Gradle✅ 是推荐IDE 开发✅ 是必需容器化部署❌ 否绝对路径脚本调用✅ 是依赖脚本逻辑结论虽然不设置JAVA_HOME可以运行部分 Java 程序但为了兼容性、可维护性和多版本管理强烈建议始终配置JAVA_HOME。

更多文章