简介:JDK 1.8.0_281 是面向仍在使用 Java 8 的开发者、运维人员与计算机专业学习者的完整开发工具包,适用于旧项目维护、兼容性验证、课程实验及类 Unix/Linux 环境下的 Java 运行与编译环境搭建。压缩包共收录 1057 个文件,整体约 140.11MB,其中以 336 个 jar 类库、200 个 xml 配置与元数据、71 个 so 本地库为主,并包含 properties 配置、md 文档、ttf 字体、png/gif 图标以及 man 手册页等辅助内容,较完整地保留了 JDK 的目录组织与工具链组成。目前已有 685 人学习或下载,说明其在 Java 8 环境需求中具有一定参考价值。包内覆盖编译、运行、调试、监控及安全证书管理等常见组件,适合用于核对 Java 8 的版本细节、研究标准库结构、验证旧系统依赖,也可作为离线环境中的基础开发套件,帮助读者减少版本不一致带来的配置与兼容问题。
1. JDK1.8.0_281 不是“装完就行”:先看一个版本错位的现场
JDK1.8 装起来像体力活,真正让人翻车的是版本错位:命令行里java -version显示 1.8.0_281,javac -version却还是 1.8.0_202,项目在本地能跑,换一台机器就报编译级别不匹配。JDK1.8.0_281 是 8u 分支后期更新,很多老项目、构建机和教学环境还在用它,装的人多,残留的旧 JRE 也多。PATH 里谁排在前面、JAVA_HOME 指向 JDK 还是 jre、安装包是 x64 还是 x86,这三件事没理顺,后面配 Maven、Gradle、IDE 都会跟着遭殃。这篇按我装机的顺序走:选包、安装、配变量、排错、验收,适合刚上手 JDK1.8 的开发者,也适合接手旧构建机的运维。
2. 下载与选包:JDK1.8.0_281 的安装包别拿错位数
JDK1.8.0_281 的安装包命名看起来只差几个字符,实际决定了后面能不能跑起来。8u281 里的 8 是主版本,u 后面是更新号,281 是这一版的具体构建号;同一个更新号下还有 Windows x64、Windows x86、Linux x64、macOS x64 等包型。老项目常见的是 x64 环境,但一些旧工控机、教学机房还留着 32 位系统,拿 x64 包过去会直接提示不兼容。另一个容易忽略的是 JDK 和 JRE 的区别:JDK 里有javac、jps、jstack,JRE 只负责运行。装完发现javac不是内部命令,多半是只装了 JRE,或者 PATH 只指到了 jre 目录。
2.1 三个平台对应的包型与文件名
我一般先看目标机器的系统位数,再决定拿哪个包。Windows 用.exe安装器适合需要写注册表、自动关联文件的环境;Linux 用.tar.gz更适合服务器和容器基镜像,解压就能用,不依赖包管理器;macOS 用.pkg装完会落到/Library/Java/JavaVirtualMachines,方便java_home统一管理。下面这张表是我自己整理时用的对照,文件名按 8u281 的常见命名写,实际拿到手以制品库页面为准。
| 平台 | 常见包型 | 安装后典型路径 | 适用场景 |
|---|---|---|---|
| Windows x64 | jdk-8u281-windows-x64.exe | D:\Java\jdk1.8.0_281 | 开发机、旧构建机、需要注册表关联 |
| Windows x86 | jdk-8u281-windows-i586.exe | D:\Java\jdk1.8.0_281 | 32 位旧系统,先确认系统位数 |
| Linux x64 | jdk-8u281-linux-x64.tar.gz | /usr/local/java/jdk1.8.0_281 | 服务器、CI 节点、容器基镜像 |
| macOS x64 | jdk-8u281-macosx-x64.pkg | /Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home | 本地开发、多版本共存 |
选包时不要只看文件名里的x64,还要确认系统本身。Windows 可以在“系统信息”里看“系统类型”,Linux 用uname -m看是x86_64还是i686,macOS 用uname -m看是x86_64还是arm64。如果是 ARM 机器跑 x64 包,通常需要额外的兼容层,这种环境我不建议硬塞 JDK1.8.0_281,先把运行层确认清楚再装。
2.2 校验哈希与安装目录规划
安装包从制品库、内部共享盘或官方渠道拿到后,我习惯先算一次哈希。不是形式主义,旧机器上出现过下载中断、压缩包尾部损坏,解压到一半报gzip: unexpected end of file,回头查半天才发现包不完整。Windows 用 PowerShell 算 SHA-256,Linux 用sha256sum,macOS 用shasum -a 256,算出来的值和制品库页面上的值逐位比对。
# Windows PowerShell:计算安装包 SHA-256 Get-FileHash .\jdk-8u281-windows-x64.exe -Algorithm SHA256Get-FileHash的-Algorithm参数可以换成MD5或SHA1,但现在制品库一般给 SHA-256,优先用这个。输出里的Hash字段要和发布页面的值完全一致,不要只比对前几位。比对不上就重新取包,不要带着损坏的安装包往下走。
# Linux:校验 tar.gz,正常输出应带 OK sha256sum jdk-8u281-linux-x64.tar.gz # macOS:校验 pkg shasum -a 256 jdk-8u281-macosx-x64.pkgsha256sum后面跟文件名即可,输出第一列是哈希,第二列是文件名;shasum -a 256的-a指定算法。校验通过后再解压或安装,这一步花不了一分钟,但能省掉后面“装到一半失败”的排查成本。
目录规划也要提前定。Windows 我一般不放C:\Program Files\Java,而是放D:\Java\jdk1.8.0_281,原因是旧安装器、脚本和 IDE 对带空格路径的处理并不一致,短路径能少很多玄学问题。Linux 放/usr/local/java/jdk1.8.0_281,再做一个/usr/local/java/current软链,后面升级只改软链,不动环境变量。macOS 交给 pkg 默认路径,不要手动挪,挪了之后java_home找不到。
2.3 旧版本共存时先做一次清单
装 JDK1.8.0_281 之前,先看机器上已经有什么。很多“装完不生效”不是新版本没装好,而是旧版本还在 PATH 前面。Windows 上用where java和where javac看实际命中的路径,再看C:\Program Files\Java和C:\Program Files (x86)\Java下有哪些目录。Linux 上看update-alternatives --list java和/usr/lib/jvm。macOS 用/usr/libexec/java_home -V列出所有已安装的 JDK。
# Linux:列出 alternatives 里注册过的 java,以及常见 JDK 目录 update-alternatives --list java ls -1 /usr/lib/jvm # macOS:列出所有 JDK,注意看版本号和路径 /usr/libexec/java_home -Vupdate-alternatives --list java会输出/usr/bin/java当前可选的候选路径;如果列表里已经有 1.8.0_202 或 1.7,后面注册 1.8.0_281 时要把优先级设高一点。/usr/libexec/java_home -V的输出里会带版本号和架构,macOS 上多版本共存时,环境变量最好用-v 1.8.0_281精确匹配,不要只写-v 1.8,否则可能命中另一个 8u 版本。
提示:旧版本不一定要立刻卸载。保留一个可回退的 JDK 在构建机上很常见,关键是 PATH 和 JAVA_HOME 要明确指向 1.8.0_281,别让“谁在前谁生效”变成黑匣子。
3. 安装落地:JDK1.8.0_281 在三套系统上的装法
安装阶段最容易犯的错是“下一步点到底”,装完不知道装到哪、改了哪些注册表、有没有顺带装一个公共 JRE。我的做法是每一步都留下可查的路径和返回码:Windows 看安装器日志和ERRORLEVEL,Linux 看解压后的目录权限和软链,macOS 看 pkg 安装后的java_home列表。下面按三套系统分别写,命令可以直接抄,但路径要换成你自己的。
3.1 Windows 静默安装与安装器日志
Windows 上如果只是自己开发,双击安装器也能装,但构建机、教学机房这种要批量装的场景,我一般用静默参数。把安装包放在一个短路径下,用管理员权限打开命令提示符,执行下面这行。/s表示静默,INSTALLDIR指定 JDK 安装目录;返回码 0 表示成功,3010 表示需要重启,其他值要去日志里看。
@echo off REM 以管理员身份运行,静默安装到短路径,避免空格和中文 jdk-8u281-windows-x64.exe /s INSTALLDIR="D:\Java\jdk1.8.0_281" REM 输出安装器返回码,0 成功,3010 需要重启 echo %ERRORLEVEL%INSTALLDIR只控制 JDK 的目录,部分安装器还会往C:\Program Files\Java\jre1.8.0_281装一个公共 JRE。装完后去这两个目录都看一眼,如果公共 JRE 也在,后面配 PATH 时不要把它加进去。安装器日志一般在临时目录里,文件名带java_install,装失败时先翻日志最后几十行,常见的是权限不足、杀软拦截、目标目录被占用。返回码不是 0 时不要反复双击重装,先把日志和目录权限查清楚。
装完后用where java看系统当前命中哪个java.exe。如果输出里出现C:\Windows\System32\java.exe,那是系统自带的占位程序,不是真正的 JDK,后面必须把%JAVA_HOME%\bin放到 PATH 最前面。Windows 上还有一个坑:安装器会写注册表,卸载重装时旧注册项没清干净,新安装器可能提示“已安装相同版本”。这种时候不要直接删目录,先用控制面板卸载,再清残留目录,最后重新装。
3.2 Linux tar.gz 解压与 alternatives 注册
Linux 服务器上我优先用 tar.gz,不依赖发行版包管理器,也不会因为yum install java-1.8.0-openjdk拉到一个不带javac的 JRE。先把包传到/tmp,解压到/usr/local/java,再做软链和 alternatives 注册。下面这段命令要在有 sudo 权限的账户下执行。
# 建统一目录,解压 JDK1.8.0_281 sudo mkdir -p /usr/local/java sudo tar -zxvf jdk-8u281-linux-x64.tar.gz -C /usr/local/java # 做 current 软链,后面升级只改软链 sudo ln -sfn /usr/local/java/jdk1.8.0_281 /usr/local/java/current # 注册 java 和 javac,优先级 2000 高于系统自带 sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_281/bin/java 2000 sudo update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_281/bin/javac 2000 # 交互式选择当前 java sudo update-alternatives --config javatar -zxvf里的z是 gzip 解压,x是解包,v显示过程,f指定文件;-C指定解压目标目录。ln -sfn里的-n很关键,如果current已经是一个指向目录的软链,不加-n可能会在软链目录里面再建一个软链,路径越套越深。update-alternatives --install的最后一个数字是优先级,越大越优先;--config java会让你手动选,非交互环境可以用--set java /usr/local/java/jdk1.8.0_281/bin/java直接指定。
注册完java还要注册javac,很多人只注册前者,结果java -version是 1.8.0_281,javac -version还是系统旧版。update-alternatives --config javac也要跑一遍,或者直接用--set。如果机器上没有update-alternatives,比如某些精简镜像,那就退回环境变量方式,在/etc/profile.d里写JAVA_HOME和PATH,不要硬找包管理器。
3.3 macOS pkg 安装与 java_home 切换
macOS 上 pkg 安装最省事,双击后按提示走,或者用installer命令静默装。装完 JDK 会出现在/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home,系统自带的/usr/bin/java只是一个转发器,真正用哪个版本由java_home决定。先列出所有 JDK,再在 shell 配置里精确指定 1.8.0_281。
# 静默安装 pkg,需要管理员权限 sudo installer -pkg jdk-8u281-macosx-x64.pkg -target / # 列出所有 JDK,确认 1.8.0_281 已出现 /usr/libexec/java_home -V # 临时切到 1.8.0_281,验证路径 export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_281) echo $JAVA_HOMEinstaller的-target /表示装到根卷,一般不需要改。java_home -V输出里会带版本号和路径,-v 1.8.0_281是精确匹配,写-v 1.8可能匹配到另一个 8u 版本。临时export只对当前终端生效,要长期生效得写进~/.zshrc或~/.bash_profile,具体看当前 shell。macOS 上还有一个常见问题:IDE 是从 Dock 启动的,不会读你终端里的export,所以 IDE 里要单独指定 JDK,或者在~/.zshrc里配好后重启 IDE。
4. 环境变量配置:JAVA_HOME 和 PATH 的先后顺序决定谁生效
环境变量这一步,原理不复杂:JAVA_HOME告诉构建工具和 IDE 真正的 JDK 根目录,PATH决定你在命令行敲java时先找哪个目录。问题出在“先后”和“范围”上。Windows 有用户变量和系统变量,Linux 有/etc/profile、/etc/profile.d、~/.bashrc,macOS 有登录 shell 和非登录 shell 的区别。配错范围,就会出现“新终端生效、IDE 不生效”“sudo 下生效、普通用户不生效”这类问题。
4.1 Windows 环境变量逐项写死
Windows 上我一般把JAVA_HOME设为用户变量,路径写 JDK 根目录,不带\bin,不带尾部反斜杠。PATH里加%JAVA_HOME%\bin,并且放在最前面。不要设CLASSPATH,除非老项目明确要求;设了CLASSPATH又没写好,java启动时可能先加载到旧 jar,排查起来很费劲。下面用 PowerShell 写用户级变量,避免影响同机器其他账户。
# 设置用户级 JAVA_HOME,路径不要带 \bin [Environment]::SetEnvironmentVariable("JAVA_HOME","D:\Java\jdk1.8.0_281","User") # 把 %JAVA_HOME%\bin 放到用户 PATH 最前面 $old = [Environment]::GetEnvironmentVariable("PATH","User") [Environment]::SetEnvironmentVariable("PATH","%JAVA_HOME%\bin;" + $old,"User")SetEnvironmentVariable的第三个参数"User"表示用户变量,换成"Machine"就是系统变量,需要管理员权限。PATH拼接时把%JAVA_HOME%\bin;放前面,保证命令行优先命中 1.8.0_281。改完要新开一个终端,旧终端不会自动刷新。验证时用echo %JAVA_HOME%和where java,where java输出的第一条应该是D:\Java\jdk1.8.0_281\bin\java.exe。
如果之前用setx改过 PATH,注意setx有 1024 字符截断的老问题,PATH 很长时可能把后半截截掉。我一般不用setx改 PATH,用图形界面或者上面的 .NET 方法更稳。改完 PATH 后如果java能跑但javac不能跑,先看where javac,大概率是JAVA_HOME写成了 jre 目录,或者 PATH 只加了 jre 的 bin。
4.2 Linux/macOS 的 profile 写法与生效顺序
Linux 上我放/etc/profile.d/jdk1.8.0_281.sh,对所有登录用户生效;如果只想给某个用户配,放~/.bashrc或~/.bash_profile。文件里只写JAVA_HOME和PATH,不写CLASSPATH。PATH里$JAVA_HOME/bin放最前面,避免/usr/bin/java抢先。
# 写入全局 profile,登录时自动加载 sudo tee /etc/profile.d/jdk1.8.0_281.sh >/dev/null <<'EOF' export JAVA_HOME=/usr/local/java/jdk1.8.0_281 export PATH=$JAVA_HOME/bin:$PATH # 不设 CLASSPATH,需要时由构建工具管理 EOF # 当前终端立即生效 source /etc/profile.d/jdk1.8.0_281.shtee配合 heredoc 写文件,>/dev/null只是不把文件内容回显到终端。export PATH=$JAVA_HOME/bin:$PATH把 JDK 的 bin 放最前面,后面的:$PATH保留系统原有路径。source只对当前终端生效,新开终端会自动读/etc/profile.d。如果发现sudo java -version和普通用户不一致,是因为sudo默认不继承当前用户的 PATH,可以在sudoers里保留 PATH,或者直接用绝对路径/usr/local/java/jdk1.8.0_281/bin/java -version验证。
macOS 上写~/.zshrc,因为新版默认 shell 是 zsh。写法用java_home精确取路径,不要手写一长串路径,后面换版本只改版本号。
# macOS:写入 ~/.zshrc,登录 shell 和 IDE 启动都能读到 export JAVA_HOME=$(/usr/libexec/java_home -v 1.8.0_281) export PATH="$JAVA_HOME/bin:$PATH"$(...)会在每次打开终端时执行,java_home返回对应版本的真实路径。如果java_home -v 1.8.0_281报找不到,先用-V看已安装列表,确认 pkg 真的装上了。macOS 的 GUI 应用不一定读~/.zshrc,所以 IDE 里最好再手动指定一次 JDK,路径就是echo $JAVA_HOME输出的那个。
4.3 CLASSPATH 为什么不建议碰
JDK1.8.0_281 本身不需要CLASSPATH才能编译运行普通 Java 程序。老教程里喜欢写CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar,这套写法在 JDK1.8 里已经过时,tools.jar也不是所有场景都需要。真正的问题是:一旦设了全局CLASSPATH,所有 Java 进程都会继承,Maven、Gradle、Tomcat 自己的类路径可能被污染,报ClassNotFoundException或加载到旧版本类。我的做法是全局不设,项目里用构建工具管理依赖;确实要临时加,就在启动命令里用-cp指定,作用范围可控。
注意:
JAVA_HOME指向 JDK 根目录,不是jre,不是bin,结尾不要带斜杠。PATH里只加%JAVA_HOME%\bin或$JAVA_HOME/bin,不要把jre\bin也加进去。
5. 安装后排错:JDK1.8.0_281 的四个高频翻车点
装完 JDK1.8.0_281 不等于配好,真正的血泪经验都在“版本对不上”和“路径不生效”上。下面四条是我在旧构建机、开发笔记本和 CI 节点上都遇到过的现场,每条按现象、原因、解决写。你不需要全背,但遇到时能对上号,能少走很多弯路。
5.1 现象:java 和 javac 版本不一致
现象很典型:命令行里java -version输出 1.8.0_281,javac -version却输出 1.8.0_202,或者直接提示javac 不是内部命令。Maven 编译时可能报invalid target release: 1.8,也可能用旧编译器编出新 JDK 跑不起来的字节码。原因通常有两个:PATH 里旧 JDK 的bin排在前面,或者只装了 JRE 没装 JDK。Windows 上where java和where javac的输出能直接看出来;Linux 上用which java、which javac和readlink -f看软链最终指向。
# Linux:看 java 和 javac 实际指向哪里 which java which javac readlink -f $(which java) readlink -f $(which javac) # Windows PowerShell:看命令命中顺序 where.exe java where.exe javacreadlink -f会一路解析软链到真实文件。如果java指向 1.8.0_281,javac指向 1.8.0_202,就把旧路径从 PATH 里挪走,或者把$JAVA_HOME/bin提到最前面。Windows 上如果where javac找不到,说明 PATH 没配到 JDK 的 bin,或者装的是 JRE。解决完再跑一次java -version和javac -version,两个版本号必须一致。
5.2 现象:JAVA_HOME 指向 jre 后编译失败
现象是java -version正常,但 Maven 报No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?,或者 IDE 里新建项目找不到 JDK。原因是JAVA_HOME写成了D:\Java\jdk1.8.0_281\jre或/usr/local/java/jdk1.8.0_281/jre。jre 目录里没有javac,构建工具按JAVA_HOME/bin/javac找编译器,自然找不到。解决很简单:把JAVA_HOME改回 JDK 根目录,去掉末尾的jre,也去掉bin。
# Windows:确认 JAVA_HOME 是 JDK 根目录 echo $env:JAVA_HOME Test-Path "$env:JAVA_HOME\bin\javac.exe"Test-Path返回True才说明JAVA_HOME下确实有编译器。Linux/macOS 用test -x "$JAVA_HOME/bin/javac" && echo ok检查。改完环境变量要新开终端,IDE 要重启或者重新选 SDK。这个坑很常见,尤其是从旧教程里复制路径时多带了一层jre。
5.3 现象:路径含空格中文导致启动失败
现象是安装时没报错,运行java -jar或启动 Tomcat 时报Error: could not open ...,路径里带空格、中文或特殊符号。原因是 Java 启动脚本、批处理文件、IDE 的 classpath 拼接对空格和中文的处理不一致。Windows 上把 JDK 装到C:\Program Files\Java\...本身不一定出错,但项目路径、jar 包路径带空格时容易翻车。我的习惯是 JDK 装到D:\Java\jdk1.8.0_281,项目放D:\work,避免中文目录。
REM 检查路径里是否有空格或中文,输出带引号更直观 echo "JAVA_HOME=%JAVA_HOME%" dir "%JAVA_HOME%\bin\javac.exe"dir能正常列出javac.exe说明路径至少能被命令行解析。如果项目路径必须带空格,启动脚本里给路径加双引号,-cp和-jar后面的路径都要加。Linux 上路径带空格相对少,但中文目录同样要避免,尤其是 CI 节点上解压目录名带中文,tar解压后权限和编码都可能出问题。
5.4 现象:卸载重装后旧配置阴魂不散
现象是卸载了旧 JDK,装了 1.8.0_281,java -version还是旧版本,或者安装器提示“已安装相同版本”。原因是旧环境变量没清、注册表残留、/usr/bin/java软链还指着已删除目录。Windows 上先看用户变量和系统变量里的JAVA_HOME、PATH,再看C:\Program Files\Java和C:\Program Files (x86)\Java是否有残留目录。Linux 上用update-alternatives --remove java /旧路径/bin/java清掉失效候选,再重新注册。
# Linux:清理失效的 alternatives 候选,再重新注册 sudo update-alternatives --remove java /usr/local/java/jdk1.8.0_202/bin/java sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_281/bin/java 2000 sudo update-alternatives --config java--remove只移除指定路径的候选,不会删文件。清完再--config看列表里是否只剩有效路径。macOS 上如果 pkg 卸载不干净,java_home -V还会列出旧目录,直接删/Library/Java/JavaVirtualMachines/旧版本.jdk,再跑一次java_home -V确认。卸载重装前把环境变量截图或导出备份,装完逐项对,别让旧配置留在 PATH 里。
6. 装完怎么验证跑通:JDK1.8.0_281 的三层验收
验收我分三层,从轻到重,任何一层不过都不往下走。第一层看版本、路径、编码;第二层编译运行一个最小程序;第三层用 JVM 参数看实际生效值。下面这几条命令不长,但能覆盖大部分“装完看着正常、用起来不对”的情况。
6.1 第一层:版本、路径、编码三项自检
先跑java -version、javac -version、echo $JAVA_HOME(Windows 用echo %JAVA_HOME%),再跑java -XshowSettings:properties -version,从输出里找java.home、java.version、file.encoding、sun.jnu.encoding。java.home应该指向 JDK 根目录或 jre 目录,java.version应该是 1.8.0_281。编码项在中文环境里容易出问题,file.encoding是 GBK 还是 UTF-8 会影响读写文件,项目要求 UTF-8 时启动参数要加-Dfile.encoding=UTF-8。
| 检查项 | 期望值 | 不对时先看 |
|---|---|---|
java -version | 1.8.0_281 | PATH 顺序、旧 JRE |
javac -version | 1.8.0_281 | JAVA_HOME 是否指向 jre |
java.home | JDK 根目录或 jre | 环境变量、IDE SDK |
file.encoding | 按项目要求 | 系统区域、启动参数 |
6.2 第二层:编译运行最小程序
写一个Hello281.java,打印版本和java.home,用javac编译、java运行。这一步能同时验证编译器、运行时和类路径。代码里不要用高版本语法,保持 JDK1.8 兼容。
public class Hello281 { public static void main(String[] args) { // 打印版本和 JDK 实际路径,便于和 java -version 对照 System.out.println("JDK1.8.0_281 OK"); System.out.println(System.getProperty("java.version")); System.out.println(System.getProperty("java.home")); } }编译时加-encoding UTF-8,避免中文注释在 GBK 终端下报编码错误:javac -encoding UTF-8 Hello281.java,然后java Hello281。输出里版本是 1.8.0_281、路径和JAVA_HOME对得上,第二层就算过。如果编译报“找不到符号”,先看javac -version是不是 1.8;如果运行报“找不到主类”,看当前目录和-cp。
6.3 第三层:用 JVM 参数看实际生效值
最后跑一次java -XshowSettings:properties -version,重点看java.home、java.class.path、file.encoding。java.class.path里如果混进了不该有的旧 jar,说明全局CLASSPATH没清干净。java.home如果指向 jre,说明 IDE 或启动脚本用了 JRE。三层都过,再把 IDE 的 SDK 指到JAVA_HOME,跑一次项目构建,才算真正交付。
从那以后我每装一台机器,都先跑一遍这三层验收,再交给业务方。JDK1.8.0_281 本身不复杂,复杂的是旧环境残留和路径顺序,把验收做成习惯,比事后救火省事得多。希望帮到你。
本文还有配套的精品资源,点击获取