简介:面向Windows 32位平台的JDK 1.6.0_06完整工具包,适合需要在老旧系统上编写、编译、调试和运行Java程序的开发者,也可作为测试环境或离线安装的备份版本。压缩包为zip格式,共690个文件、约40.89MB,包含exe可执行程序、dll动态链接库、jar类库、properties配置文件以及html/txt/rtf说明文档,并附带JVM运行时所需的时区数据与安全组件,工具链涵盖javac编译器、JRE运行环境、JDB调试器及Javadoc文档生成器,可满足从源码编译到问题排查的完整开发需求。已有323人浏览学习。包内中文与英文README、版权许可、注册信息齐全,便于按说明安装并了解授权边界,大量时区映射、区域设置及classlist等文件对处理国际化应用或自定制JVM行为具有实用价值,整体结构清晰、组件完整,能够为Java 6时代的应用开发提供可复现的基础环境。 前几天给同事的Windows 11工作机恢复一套遗留项目的编译环境,项目里的构建脚本写死了jdk1.6.0_06,还明确要求装在C:\Java\jdk1.6.0_06。一开始我以为这活儿很快,装个老JDK能有多难,结果光是“装完后java -version还是显示JDK 17”这个问题就折腾了大半天;后面又遇到Eclipse指定JRE后编译报错、Maven读取到另一套环境的怪事。把整个window-jdk-jdk1.6.0_06落地过程复盘一遍,这次踩坑的经历其实很有代表性——老版本工具在Windows下的安装,早就不是单纯的“下一步”能搞定的了。这篇文章把安装包来源、安装选项、环境变量、多版本共存和排查方法完整写出来,给正在维护老系统、或者需要复现历史环境的朋友一份可以照着操作的清单。
1. 为什么偏偏是 jdk1.6.0_06:版本回顾
1.1 JDK 6和update 06的背景
JDK 6就是Java SE 6,内部版本号是1.6.0,Sun公司在2006年底发布。它算得上Java历史上寿命很长的一个版本,后面经历了6u1到6u45一堆更新包。update 06大约是2008年初放出来的,带着一些bug修复和性能优化,当时的NetBeans、Eclipse 3.3/3.4这些IDE都在围绕这个版本做兼容。
现在回头看,1.6.0_06并不是JDK 6生命周期里最成熟的版本,它在安全补丁和某些类库行为上肯定比不过6u45。但在实际项目里,版本选择从来不是选最好的,而是选最匹配的。很多老项目的编译参数、第三方SDK的字节码依赖、发布脚本里写死的Java路径,都是按某个特定update版本定下来的。你贸然换到更新的update,未必会出大问题,但也没人敢赌。
1.2 什么场景会绑定这个老版本
我在帮人处理环境时,遇到过几种把版本锁死在1.6.0_06的情况。
第一种是老的业务系统。国内不少保险、银行、政务类的项目,十多年前用的是公司内部封装的框架,这些框架在JDK更新时偶尔会出现类加载顺序变化或者某些内部API被移除的问题。为了线上环境稳定,开发环境必须和线上完全一致,于是整个团队都锁在同一个版本。
第二种是老的桌面客户端。有些项目还在用Swing或SWT做客户端,打包时依赖Java Web Start,某些自定义类库编译时用了比较旧的javac版本,如果更新JDK,客户端的界面字体或控件行为会出现细微差异。
第三种是最常见的:公司里的构建脚本和CI配置把JDK路径写死了。比如一批老脚本里直接写set JAVA_HOME=C:\Java\jdk1.6.0_06,你换成别的路径,脚本就会报错。这种情况下,机器上装一个指定路径的老JDK,反而是最省事的解决办法。
2. 下载安装包与系统环境检查
2.1 安装包从哪里拿,怎么核对
老JDK的安装包在Oracle官方的Java Archive页面能找到,地址就是oracle.com/java/technologies/downloads/archive这个入口。进入后要往下翻,找到Java SE 6那一栏,再从版本列表里挑1.6.0_06。页面需要登录Oracle账号,没有账号的得先注册一个,下载时还要勾选接受许可协议。
实际维护工作中,我不建议每次都在线下载。公司内部如果已经有了软件仓库或者公共网盘,最好把jdk-6u6-windows-i586.exe这种安装包沉淀下来,下次装直接取,速度快还不依赖外部网络。无论从哪下载,安装前一定要做文件校验,用certutil命令生成哈希值和官方公布的对一下,避免下载到被篡改的文件。
certutil -hashfile jdk-6u6-windows-i586.exe SHA2562.2 Windows兼容性检查与现有Java环境清理
JDK 1.6.0_06发布的时候,Windows Vista和Windows Server 2008还是主流,Windows XP也还在用。放到今天,主流工作机大多是Windows 10或Windows 11,虽然微软官方没有承诺兼容,但实际装下来,JDK 6的安装程序在Windows 10上基本能跑,Windows 11上偶尔会弹程序兼容性助手,选择“仍然运行”就行。
在正式安装之前,我习惯先做一次环境盘点,尤其是那些已经装过JDK 8、JDK 17的机器。在命令行里执行java -version、javac -version、echo %JAVA_HOME%和where java,把当前生效的JDK路径看清楚。很多时候所谓的“装不上”,其实是老版本被新版本盖住了,命令一直指向新JDK,造成一种“安装失败”的错觉。
如果机器之前装过其他版本的JDK,新手可能会急着卸载。我的建议是先别卸,等新JDK装好、环境变量调整完再判断。老机器上可能存在某些应用依赖原有JDK,全卸了反而容易出现未知问题。
3. 安装向导实操:路径与组件如何选择
3.1 自定义安装路径的小心思
双击jdk-6u6-windows-i586.exe,会进入一个纯Swing界面写的安装向导,这个界面本身就很有年代感。安装向导提供了“典型安装”和“自定义安装”两个选项,我强烈建议选自定义安装,因为默认路径实在是太折腾了。
JDK 6的默认安装路径是C:\Program Files\Java\jdk1.6.0_06,中间带空格。对现代工具来说路径带空格问题不大,但对老项目来说,很多构建脚本、批处理文件在处理带空格的路径时经常出幺蛾子。老脚本写路径不规范、没加引号,空格就会被当成分隔符,导致找不到可执行文件。
所以我一般会建一个干净的短路径:C:\Java\,然后把JDK装到这个目录下,形成C:\Java\jdk1.6.0_06。路径里不带空格、不带中文、不带括号,后续配置环境变量和写脚本都能省很多心。
3.2 安装时组件怎么选,装完怎么验证
安装向导会让你选择组件,包括开发工具、演示代码、公共JRE和源代码等。开发工具必须选,这是javac和java命令所在的地方;公共JRE建议也装上,因为很多老项目直接双击jar包运行时依赖公共JRE的注册信息。
演示代码和源代码按需选择。如果磁盘空间不紧张,我通常会把源代码也勾上,方便在IDE里直接查看JDK自带的类实现。安装过程后半段,向导还会询问浏览器Java插件相关设置,在现代浏览器里这东西基本没用了,可以直接跳过。
安装完成后,别急着配置变量,先看一眼目录结构是否完整。正常的C:\Java\jdk1.6.0_06下面应该有bin、lib、jre、demo、include、db这些子目录,以及src.zip文件。关键是确认bin\java.exe和bin\javac.exe存在。如果连javac都没有,说明刚才组件选择时没勾开发工具,后面配置了也是白配。
4. 环境变量配置:写错一个地方全盘皆输
4.1 JAVA_HOME、PATH、CLASSPATH的正确配置
环境变量是JDK安装的重头戏,老版本JDK比新版本更敏感,因为很多老工具会同时读这几个变量。
第一个是JAVA_HOME。在“此电脑”上右键选择“属性”,进入“高级系统设置”,点“环境变量”,在系统变量里新建或者编辑。变量名填写JAVA_HOME,变量值填写C:\Java\jdk1.6.0_06,注意结尾不要带反斜杠,也不要加上bin目录。有些教程会写成C:\Java\jdk1.6.0_06\,多出来的反斜杠在某些老脚本拼接路径时会变成双反斜杠,属于经典坑位。
第二个是PATH。在系统变量里找到Path,编辑它,在最前面新增一行%JAVA_HOME%\bin。放在最前面这步很关键,Windows系统执行命令时是按PATH顺序从前往后找的,如果你机器上还有JDK 17,JDK 17的bin路径排在前面,你辛辛苦苦装的1.6.0_06就永远不会被用到。
第三个是CLASSPATH。JDK 6时代经常会配这个变量,常见写法是:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar开头的.代表当前目录,老项目编译时经常需要从当前目录加载类。dt.jar和tools.jar是JDK 6编译运行时的两个基础库,某些老框架会直接引用它们。需要说明的是,这个变量在JDK 9之后就被移除了,新JDK不需要配,但既然是装1.6.0_06,还是按老规矩来,省得某些老编译器报奇怪的ClassNotFound异常。
配置完环境变量后,务必要重新打开一个新的命令行窗口。已经打开的cmd窗口或IDE进程不会自动刷新环境变量,这也是“明明配好了但命令不生效”最常见的原因。
4.2 系统里已有其他JDK时的优先级处理
我个人比较推荐的顺序是:先配老JDK,再考虑新JDK。既然你这台机器是因为老项目才装1.6.0_06,那全局环境变量就先指向它,JDK 17这种高版本放到IDE里单独指定。
环境变量有系统变量和用户变量两套,Windows会先读取系统变量、再读取用户变量,后面的值会覆盖前面的。如果你在用户变量里设置了JAVA_HOME指向JDK 17,又在系统变量里设置了指向1.6.0_06,最终生效的可能还是用户变量里那个。排查时发现改了系统变量却不起作用,就去看看用户变量里是不是还有一层。
5. 验证安装和多版本共存
5.1 验证命令输出怎么看
打开一个全新的cmd窗口,依次输入三段命令来确认安装效果。
echo %JAVA_HOME%如果输出是C:\Java\jdk1.6.0_06,说明JAVA_HOME配置正确。
java -version正确时会显示类似这样的信息:
java version "1.6.0_06" Java(TM) SE Runtime Environment (build 1.6.0_06-b02) Java HotSpot(TM) Client VM (build 10.0-b22, mixed mode, sharing)看到第一行的版本号是1.6.0_06,而不是17或者1.8,就说明当前生效的是老JDK。
javac -version输出应该是javac 1.6.0_06,如果javac命令报识别不了,说明PATH里没有指向JDK的bin,可能指向了单独的JRE路径。这是初学者常遇到的情况,单独安装的公共JRE只有java命令,没有javac,所以java能用、javac不能用。
5.2 IDE、Maven、命令行工具的版本切换
全局环境变量设好之后,还需要在开发工具里单独配置。
Eclipse的处理方式是:Window菜单里打开Preferences,在Java这个分类下找到Installed JREs,点Add,选择Standard VM,然后指定目录C:\Java\jdk1.6.0_06。继续在项目的Build Path里把JRE System Library切换过去,或者在项目属性里把Java Compiler的Compiler compliance level调成1.6。
IntelliJ IDEA的操作路径类似,在File -> Project Structure里选择SDKs,新增一个JDK,目录同样指向C:\Java\jdk1.6.0_06。还要注意老项目如果依赖老版本的打包方式,在Settings里把Java Compiler的target bytecode version改成1.6。
Maven有个坑需要特别注意。mvn命令在运行时,默认使用环境变量JAVA_HOME指向的JDK。即使你在IDEA里设置了新的JDK,如果命令行工具调的Maven是用旧的JAVA_HOME启动的,Maven依然会用老JDK去编译。可以用mvn -version查看Maven当前所用的Java版本。
如果需要在多个JDK之间来回切换,我习惯在桌面放几个批处理脚本。比如切到老JDK时运行以下内容:
@echo off set JAVA_HOME=C:\Java\jdk1.6.0_06 set PATH=%JAVA_HOME%\bin;%PATH% java -version这个脚本只在当前cmd窗口生效,不会影响系统全局配置,避免了反复去改环境变量的麻烦。
6. 老版本JDK在Windows上的常见问题与最后提醒
6.1 javac不可用和版本冲突
JDK 6在Windows上最经典的问题,就是java命令正常、javac命令报错或找不到。这通常是因为PATH里排在前面的不是JDK的bin目录,而是某个单独的JRE目录。单独装的JRE只有java.exe,没有javac.exe,所以java能运行,编译就抓瞎。解决办法是把%JAVA_HOME%\bin调整到PATH最前面。
另一个高频问题是在运行老项目时遇到UnsupportedClassVersionError。这个异常的含义是当前JVM版本太低,无法启动用更高版本JDK编译的类。对应的版本编号是有规律的:Java 1.2是46.0,1.3是47.0,1.4是48.0,Java 5是49.0,Java 6是50.0,Java 7是51.0,Java 8是52.0。如果看到major.minor version 50.0,说明这个class是JDK 6编译的,你当前运行环境必须至少是JDK 6;反过来,如果你用JDK 6跑JDK 8编译的class,就会看到UnsupportedClassVersionError。遇到这个异常,不要怀疑环境,直接检查class文件的编译来源和当前JDK版本。
6.2 乱码和控件类问题
老JDK在中文Windows上还有一个经典问题,就是控制台输出乱码。JDK 6时期Windows控制台默认编码是GBK,如果程序里没显式指定文件编码,一到中文环境就乱。排查时可以用-Dfile.encoding=GBK参数临时调整运行编码,但最根本的办法还是让项目代码在读写文件时明确指定字符集,不要依赖系统默认。
至于老一代Java Applet和浏览器插件,现在的浏览器已经完全不支持了,Chrome、Edge、Firefox都不再维护相关插件机制。如果你维护的项目还依赖浏览器里的Java控件,这台开发机基本只能当成一个历史环境的兼容运行池,别指望它能接入现代Web工作流。
6.3 安全收敛建议
最后必须说一句,JDK 1.6.0_06是十几年前的版本,漏洞实在太多,Oracle早就停止了对Java 6的公开维护。2020年之后,连付费的商业更新也逐渐收窄了覆盖范围。所以它只适合放在隔离的开发环境、内网环境或者虚拟机里,用来编译老代码、复现历史问题,绝对不要用它去运行暴露在公网上的服务。如果需要对外提供服务,还是要想办法把应用迁移到更高版本JDK,用容器虚拟化或者升级中间件来解决兼容问题。
我在实际维护老项目时还有个习惯:装完环境后,打包一份干净的JDK目录和一份环境变量配置截图,放在项目文档里。老项目的环境问题往往不是装一次就完事,过几个月换台电脑又要重来一遍。把路径、变量、版本信息固定下来,下次再有人问“怎么装JDK 1.6”,直接把这份笔记甩过去就够了。
本文还有配套的精品资源,点击获取