ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Eclipse 2020-06与JDK 1.8兼容配置全攻略:安装、调优与高频报错排查

Eclipse 2020-06与JDK 1.8兼容配置全攻略:安装、调优与高频报错排查 最近帮一个朋友处理IDE问题搞得有点头疼。他把Eclipse和JDK都换成了最新版结果启动时报了一堆错编译老项目更是直接崩。折腾半天最后发现源头就一个他用JDK 1.8却装了2020-09之后的Eclipse。这俩根本不兼容2020-06版就是JDK 1.8能用的最后一代Eclipse。这篇文章就把我用Eclipse 2020-06搭配JDK 1.8的完整安装配置过程写清楚从下载渠道、环境变量、eclipse.ini调优到那些高频启动报错、Tomcat主类问题的排查思路一次性讲透。如果你也守着JDK 1.8维护老项目、或者公司开发环境锁死了版本这篇应该能帮你省下不少时间。1. 为什么是2020-06Eclipse官方对JDK 1.8支持的分水岭在动手下载之前必须先搞清楚一个关键事实Eclipse 2020-06平台版本号4.16是官方最后一个能在JDK 1.8上运行的版本。这不是我拍脑袋说的而是Eclipse基金会版本策略调整的必然结果。1.1 Eclipse版本策略的一次转向从2020-09版4.17开始Eclipse平台自身迁移到了Java 11基线。什么意思呢就是说IDE这个软件本体它的启动器和大量核心组件都是用Java 11编译的运行时必须有JDK 11或更高版本才行。你哪怕用JDK 1.8的编译器去编译自己的业务代码IDE本身也跑不起来启动器直接报UnsupportedClassVersionError或者干脆闪退。这里有个常见的理解误区很多人以为Eclipse 2020-09之后不支持Java 8了其实不是。新版Eclipse照样能帮你写JDK 8代码也能把编译级别调成1.8。问题是IDE这个程序自己需要JDK 11来启动而你的机器上只有JDK 8这就卡死了。所以准确的说法是2020-09之后的Eclipse无法在JDK 1.8环境里运行。为什么2020-06成了边界因为它是最后一次用Java 8编译、可以在JDK 8上运行的版本。再往后的2020-09、2020-12、2021-03……全都要求JDK 11起步而且越往后对JDK版本要求越高比如2022-03之后就要JDK 17了。1.2 2020-06版的实际意义与性能常态对还在用JDK 1.8的人来说Eclipse 2020-06差不多是最后一个各方面都顺手的老版本。它基于4.16平台对Maven、Gradle、Spring Boot、Tomcat等主流插件的支持都相当成熟日常开发完全够用而且稳定性和内存控制比更早的Photon、2019系列要好不少。我用它维护过一个跑了七八年的老项目三四个模块加起来几十万行代码启动索引、自动编译、Debug断点都挺流畅。相比现在动辄占好几个G内存的新版IDE2020-06加上合理的eclipse.ini配置2G内存就能带得动这在这种老设备、老系统上非常实用。1.3 哪些人必须死守2020-06我总结了一下下面几类人群基本属于必须用2020-06的范畴开发机系统还是Windows 7装不了新版Eclipse所需的底层环境。公司IT策略把JDK锁死在1.8没法装JDK 11或更高版本。项目依赖了只能在JDK 8上运行的第三方库或中间件。手头有老的Maven、Gradle插件版本升级到新版Eclipse之后冲突不断。如果你属于上面任何一类那这篇教程就是为你准备的。如果你没有这种限制其实可以直接上最新版Eclipse配JDK 17或21没必要走回头路。选错版本是很多Eclipse问题的总根源先把这一步定下来后面的事才谈得上。2. 下载前的三件事确认JDK、选对安装包、搞定下载渠道很多人上来就百度eclipse官网下载然后从搜索结果随便点一个看起来像官网的链接就下了。这里头的坑不少。我建议先把下面这三件事理清楚再动手下载。2.1 先确认JDK是否已经就绪JDK是Eclipse运行的基础。理论上Eclipse需要的是JRE但实际做Java开发必须装完整JDK否则看不到源码、没法编译、Tomcat也起不来。打开命令行窗口输入java -version如果输出类似下面这样说明JDK已经装好java version 1.8.0_202 Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)注意看版本号是1.8开头这表示JDK 8。如果显示的是11.0.x、17.0.x这种说明你机器上装的是新版JDK后面要么另装1.8要么就得换新版Eclipse。如果javac命令也输出了版本信息说明编译器正常。没装JDK的话建议下载jdk-8u202-windows-x64.exe这类安装包Oracle官方下载页面现在需要注册Oracle账号才能下没有账号的话可以找OpenJDK 8的发行版比如Adoptium、Alibaba Dragonwell一样能用环境变量配置方法完全相同。还有一个容易踩的坑确认你机器上是64位系统还是32位系统。Eclipse和JDK必须保持同一位数。怎么看右键此电脑选属性看系统类型一栏。64位系统就下载x86_64版的JDK和Eclipse32位系统就只能用32位版本。2.2 选哪个发行包Java Developers就够了Eclipse的官网下载页面上有很多发行包什么Eclipse IDE for Enterprise Java and Web Developers、Eclipse IDE for C/C Developers、Eclipse IDE for PHP Developers……平时做Java后端开发选Eclipse IDE for Java Developers就够用了。这里说一下2020-06时代的Enterprise Java发行包里面预装了大量JEE相关插件对传统SSH项目有一定帮助。但它的体积更大、启动更慢、插件间还容易出兼容性问题。如果你只是做普通Java项目、Maven项目、Spring Boot项目Java Developers版本完全能覆盖需要的额外插件后面按需安装就行。下载的文件格式Windows平台选.zip部分页面给的是压缩包macOS选.dmgLinux选.tar.gz。不要下Windows安装器.exe安装器那个走的是Oomph安装器流程会额外下载很多东西还可能自动帮你装最新版反而麻烦。直接用zip包解压就是免安装版清爽。2.3 官网下载与镜像渠道的取舍Eclipse官网首页默认展示的是最新版本要找历史版2020-06有两条路页面底部找More Downloads或者Other Downloads然后进Release Train列表找到2020-06选对应平台。直接访问Eclipse官方归档站。路径是https://www.eclipse.org/downloads/packages/release/2020-06/r这个归档页面里会列出Windows、macOS、Linux各个版本。点进去之后选择适合自己架构的下载链接即可。比如64位Windows系统就找eclipse-java-2020-06-R-win32-x86_64.zip。如果官网下载速度太慢、或者公司网络访问不了外部网站可以试试国内镜像。清华TUNA、华为云镜像基本都同步了Eclipse的部分资源但历史版本不一定全。最稳妥的方法是直接在浏览器地址栏输入上面的归档地址配合下载工具通常都能拿下来。我自己的经验是归档站速度比主站快因为没那么多页面资源加载直接把链接丢给IDM或迅雷下载很快就能完成。下载完之后压包大约200多MB解压后大约500多MB先确认一下文件大小和完整性再解压。解压工具推荐7-Zip或BandizipWindows自带的解压在处理这种超过2万个文件的zip包时偶尔会出问题。3. JDK 1.8环境变量与Eclipse的第一次握手Eclipse本身是绿色解压就能跑的但JDK环境变量配置不当Eclipse启动后会出现各种奇怪问题。提前把这一环理顺后面少折腾很多。3.1 环境变量配置的标准流程JDK安装完成后需要手动配置三个环境变量JAVA_HOME、Path、CLASSPATH。右键此电脑 → 属性 → 高级系统设置 → 环境变量。在系统变量区域点新建变量名填JAVA_HOME变量值填JDK安装目录比如C:\Program Files\Java\jdk1.8.0_202。注意变量值不要带最末尾的斜杠更不要填到bin目录。JAVA_HOME应该指向JDK的根目录而不是bin目录。然后是Path变量。选中Path点编辑在变量值最前面加上一行Win10及以上按新建一条%JAVA_HOME%\bin为什么要放在最前面因为系统查找命令时是从前往后找的如果Path里有其他Java版本路径插在前面你敲java -version时运行的可能就是别的JDK了。这种环境变量里藏着另一个Java的情况特别坑我见过好几次表现就是Eclipse里编译和命令行不一致。最后是CLASSPATH很多人现在说不用配但JDK 8时代配一下更保险.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;最开头的英文句号和分号代表当前目录允许你在当前目录下查找类。这个在命令行运行Java程序时经常会用到。3.2 多JDK共存时的路径陷阱如果你机器上已经装了JDK 17、JDK 21之类的版本再装JDK 1.8环境变量就会打架。谁在Path前面谁生效这个完全没有统一标准完全取决于你当时怎么改的。解决思路不是卸载新版JDK而是用Eclipse的-vm参数把Eclipse启动时用的JDK精确锁死。这样无论系统PATH里JAVA_HOME指向哪里Eclipse启动用的都是你指定的JDK 1.8不受系统环境影响。具体配置方法下一章的eclipse.ini部分会详细说。另外一个小提醒注册表里可能也留了Java路径某些软件会从这里找JDK。如果你改了环境变量还是不生效试试在命令行里输入where java它会明确告诉你到底用的是哪个目录下的java.exe。顺着这个路径去查基本能揪出藏着的那个JDK。3.3 用一条命令验证安装结果JDK装完、环境变量配完之后一定要重新打开一个新的命令行窗口再做验证。因为Cmd窗口是在打开时读取环境变量的旧窗口里配置不会生效。java -version javac -version where javajava -version确认运行JRE是1.8javac -version确认编译器是1.8where java确认运行的java.exe来自你配置的JAVA_HOME路径这三条命令全部符合预期JDK这边就算彻底准备好了。可以开始折腾Eclipse了。4. eclipse.ini调优与首次启动配置清单解压Eclipse之后不要急着双击运行。先把安装目录下的eclipse.ini打开看一眼把该加的参数加上免得启动后卡成幻灯片再回头改。注意eclipse.ini是编码敏感的文件修改时保持它原有的换行和格式不要用记事本以外乱七八糟的编辑器重新编码容易出问题。4.1 解压路径与目录规范先把解压后的eclipse文件夹放到一个简洁的路径下比如D:\dev\eclipse\路径里最好不要有中文和空格。这类老牌IDE对空格路径的兼容性虽然比以前好了但还是有部分插件在带空格的路径下会出幺蛾子。目录结构大概是这样eclipse/ ├── eclipse.exe ├── eclipse.ini ├── configuration/ ├── dropins/ ├── features/ ├── plugins/ └── readme/双击eclipse.exe能正常弹出工作空间选择窗口说明基础安装没问题。这里先别急着建工作空间按下面的步骤把配置改完再启动。4.2 eclipse.ini内存参数与-vm参数的正确姿势用编辑器打开eclipse.ini我看到最常见的初始内容大概是下面这样版本不同最后的launcher版本号会不一样-startup plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1100.v20190907-0428 -product org.eclipse.epp.package.java.product -showsplash org.eclipse.epp.package.java --launcher.defaultAction openFile -vmargs -Dosgi.requiredJavaVersion1.8 -Xms256m -Xmx1024m要改的是两个地方。第一在-vmargs之前加上-vm参数精确指定JDK路径。不要等Eclipse自己去Path里找直接指给它看。比如-vm C:/Program Files/Java/jdk1.8.0_202/bin/javaw.exe注意几个要点-vm必须在-vmargs之前路径用正斜杠否则末尾的反斜杠可能被当转义符指定到javaw.exeWindows无控制台版本不要指定到java.exe避免弹出的黑窗口。第二调内存参数。新手机器上建议改成-Xms256m -Xmx2048m-Xms表示JVM初始堆大小256m够IDE启动用了。-Xmx表示最大堆大小2048m对绝大多数老项目开发场景足够了。你要是机器内存够大比如16G可以再往上调压榨一下IDE性能如果内存只有4G建议保持1024m左右否则你自己其他程序就没内存可用了。改完之后的完整eclipse.ini大致长这样-startup plugins/org.eclipse.equinox.launcher_1.5.700.v20200207-2156.jar --launcher.library plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.1100.v20190907-0428 -product org.eclipse.epp.package.java.product -showsplash org.eclipse.epp.package.java --launcher.defaultAction openFile -vm C:/Program Files/Java/jdk1.8.0_202/bin/javaw.exe --launcher.appendVmargs -vmargs -Dosgi.requiredJavaVersion1.8 -Xms256m -Xmx2048m改完保存再启动Eclipse。如果一切正常会进入工作空间选择界面。4.3 首次启动工作空间、编码、JRE与编译级别首次启动会让你选择工作空间workspace目录。工作空间文件夹里存储你的项目配置、插件状态等建议放到一个独立目录比如D:\dev\workspace不要放到C盘系统盘重装系统时不用慌。勾选Use this as the default and do not ask again以后启动就直接进入。进入IDE之后建议立刻做四件事第一安装Properties里的编码配置。打开Window - Preferences在搜索框输入encoding把Workspace面板下的Text file encoding改成UTF-8。不然后面建Java源文件中文注释全是乱码。建议顺手把Window - Preferences - General - Editors - Text Editors里的Displayed tab width改小或者保持默认看个人习惯。第二绑定JDK 1.8。在Preferences里搜JRE进入Java - Installed JREs点Add - Standard VM然后Directory选择JDK目录C:\Program Files\Java\jdk1.8.0_202Apply。同时确保默认JRE选择的也是这个JDK而不是某个JRE。第三设置编译器级别。进入Java - Compiler把Compiler compliance level设为1.8。这确保IDE编译生成的字节码版本是1.8配合上面的JRE设置运行时就不会出现版本不匹配的问题。第四设置类视图与快捷键习惯。可以利用Window - Perspective - Customize Perspective把常用的视图加进去。我个人习惯把Console、Problems、Outline这三个视图固定住调试时效率高不少。其他偏好设置可以慢慢调但上面四个是每次配环境必做的。5. 高频故障排查从启动报错到Tomcat主类异常就算按前面流程走配完也难免遇到几个经典毛病。有些问题我会直接给答案但更希望大家看完能掌握排查思路——因为老版本Eclipse的问题往往不是某一个原因而是一长串环境问题叠加出来的。下面这些是我见过最多、也最典型的故障。5.1 启动即失败Failed to create the Java Virtual Machine现象双击eclipse.exe弹窗提示 Failed to create the Java Virtual Machine或者启动几秒后窗口消失。这种报错绝大多数出在eclipse.ini的内存参数上。常见两种情况-Xmx设得太大比如2048m但你的Eclipse是32位版本。32位JVM最大只能寻址不到1.5G左右的内存超过就创建虚拟机失败。-Xms和-Xmx的值写反了或者写成了小数、非数字导致JVM参数解析失败。排查步骤先用命令行启动Eclipse。在eclipse目录打开cmd输入eclipse.exe -clean这样能看到完整的错误输出比双击启动时一闪而过的弹窗靠谱得多。检查eclipse.ini里-Xms和-Xmx的大小关系-Xms必须小于等于-Xmx。确认Eclipse的位数。打开eclipse目录下的eclipse.ini看--launcher.library那行的路径里有没有x86_64。没有的话说明是32位Eclipse-Xmx2048m就别指望了改回-Xmx1024m以下。5.2 位数不一致Java was started but returned exit code 13现象双击Eclipse弹窗提示 Java was started but returned exit code 13。这个报错的原因非常明确Eclipse的位数和JDK的位数不一致。比如Eclipse是64位但设置的java.exe是32位的或者反过来。排查链路在命令行输入java -version看输出末尾是64-Bit还是32-Bit。打开eclipse.ini确认-vm参数指向的路径如果没手动指定过那么Eclipse会用Path里的java这时候位数不确定。在eclipse目录里新建一个cmd窗口跑eclipse.exe -clean看准确错误信息。确认下载的Eclipse安装包是win32-x86_64还是别的什么。解决办法就一句话保持Eclipse和JDK位数一致然后在eclipse.ini里用-vm参数显式锁死路径。5.3 找不到或无法加载主类 org.apache.catalina.startup.Bootstrap这个报错几乎是SSH项目、老Web项目开发者的老朋友了。现象是在Eclipse里启动Tomcat时控制台报找不到或无法加载主类 org.apache.catalina.startup.Bootstrap或者提示某个类找不到。这个报错本质上不是Eclipse自身的问题而是Tomcat Server在Eclipse中的运行环境配置错了。我在多个项目里排查过最核心的原因通常是下面三个之一原因一项目没有关联到Tomcat Runtime。每个Web项目在Properties - Targeted Runtimes里都必须勾选对应的Tomcat版本。如果这个选项是空的那么Tomcat启动时不会加载项目里的Web模块控制台就会报一些类找不到的错误。原因二Tomcat运行时配置选错了JDK。进入Window - Preferences - Server - Runtime Environments找到你配置的Tomcat选中并点击Edit看JRE那一栏。如果选的是JRE而不是JDK很可能会导致启动时Tomcat缺类。改成JDK 1.8然后重启Eclipse再试一次。原因三Server视图中的Tomcat没有真正启动。如果是在Servers视图里看到了Tomcat但右键不是Start而是灰色状态或者你直接跑到某个类文件点Run As那当然找不到主类。正确启动方式是把项目Add到Server上然后选中Server点绿色启动按钮。排查时按照这个链路走在Servers视图里停掉所有Tomcat实例右键删除。Window - Preferences - Server - Runtime Environments删掉旧配置重新Add选Tomcat安装目录JRE选JDK 1.8。项目右键 - Properties - Targeted Runtimes勾选对应的Tomcat。项目右键 - Maven - Update Project如果有Maven的话然后Project - Clean。在Servers视图里新建一个Tomcat实例把项目Add进去重新启动。我遇到过一次特别隐蔽的情况是公司的Tomcat被人家改过里面的catalina.jar损坏了。这种情况看Tomcat安装目录的lib文件夹也能查出来Bootstrap类就在catalina.jar里如果文件损坏直接换一个干净的Tomcat重新解压就行。5.4 编译与运行时的UnsupportedClassVersionError现象项目在Eclipse里编译正常但运行时抛出UnsupportedClassVersionError提示 class file has wrong version 52.0或者反过来。这个报错的核心是编译器和运行环境用了不同的JDK版本。版本号对应关系如下52.0 Java 855.0 Java 1161.0 Java 17如果你的代码是JDK 8编译出来的52.0但运行环境的JRE是1.7版本号51.0就会报这个错。这种问题在Eclipse里排查分三步确认项目编译级别项目右键 - Properties - Java Compiler看是否勾选了Enable project specific settings里的Compiler compliance level确保是1.8。确认运行配置的JRERun - Run Configurations - 左边选你的应用 - 右边JRE标签选择Workspace default JRE还是Alternate JRE确保指向JDK 1.8。确认Tomcat/服务器运行环境参考5.3里的Runtime Environments配置。很多莫名其妙的版本问题最后都归结于某个下拉框没选对这类问题脏就脏在不太容易定位总得绕一圈才发现。6. 老环境实用扩展插件、内存分析与其他常用搭配2020-06版虽然是老版本但它的插件生态还比较完整日常开发需要用到的插件基本都能装上。这一章聊几个我实际用过的组合方案顺便说点对应版本的坑。6.1 常用插件安装离线安装与市场匹配老版本Eclipse装插件优先考虑离线方式。原因是Eclipse Marketplace里很多插件已经更新到只支持新版Eclipse在线安装时版本兼容性很难保证。离线安装的好处是稳定、可控特别适合构建一个谁都能复现的开发环境。以工作流项目常用的Activiti插件为例。搜索eclipse activiti插件离线安装这个话题的时候能看到很多人在线装失败或者装了之后发现新版插件和2020-06不匹配最后只能回到特定版本离线包。实际操作流程是拿到对应的离线插件压缩包通常是一个包含features和plugins的zip。Eclipse菜单Help - Install New Software。点Add在弹窗里点Archive选择插件zip包命名随意。勾选会出现的内容按提示重启Eclipse。需要注意一点Help - Install New Software方式装插件和把插件直接丢进dropins目录是两种方式装了不要混用。我自己更倾向Install New Software因为它会被记录进Eclipse的配置里卸载时能干净移除。如果你用不到Activiti这种工作流插件只做普通CRUD项目建议不要装太多。插件越多启动越慢内存占用越大老版本Eclipse更是这样。用到什么再装什么是最稳妥的做法。6.2 查看类图与内存分析工具热搜词里有两项很常见eclipse查看类图、eclipse mat。这里一并说一下。查看类图2020-06自带的基础功能里Open Type Hierarchy可以看继承关系、接口实现快捷键是F4这个在画架构图时够用。但你要是想生成类似UML的类关系图可以装ObjectAid UML Explorer或AmaterasUML插件不过这两个插件在2020-06上兼容性一般遇到启动崩溃的概率不低。我的建议是日常看继承关系用F4自带功能真要美观把类图导出可以考虑用独立工具生成别在Eclipse里折腾插件。MATMemory Analyzer是排查内存溢出的强力工具。不过MAT现在基本以独立版为主了官方提供了独立安装包不需要硬塞进Eclipse。你用2020-06的Eclipse跑应用、生成Heap Dump文件然后用独立版MAT分析这样最方便也不怕内存里的模块互相打架。我记忆比较深的一个案例某个老服务运行一段时间后内存就冲上去了一直找不到持有者。后来用MAT的Dominator Tree一看是某个静态集合一直在累积处理过的记录而且没有清理。这种情况下光靠Eclipse的Debug视图是看不出问题的必须上分析工具。6.3 老版本的使用纪律与升级路线最后聊点维护老环境的注意事项这是我在实际运维中总结出来的一套纪律。第一不要随意升级Eclipse的插件到最新版。老版本Eclipse搭配太新的插件经常会出现菜单消失、视图打不开、甚至启动时错误一堆的情况。插件能用就坚决不动这是第一纪律。第二备份好工作空间里的.metadata目录和eclipse.ini。.metadata里存了所有项目的状态、编译缓存、启动记录丢了它Eclipse打开时就跟失忆了一样。建议定期把.metadata目录和eclipse.ini打包存一份。我一般每改一次重要配置就备份一发出问题直接还原。第三杀毒软件记得给Eclipse目录加白名单。Windows Defender或360经常扫描Eclipse的plugin目录导致启动时加载慢、甚至卡死。把D:\dev\eclipse加进白名单能明显提升启动速度。第四关于未来升级路线。如果你手头的新项目没有JDK 8限制我建议在另一台机器或目录下装新版Eclipse配新版JDK专门用于新项目开发。这样老项目用老环境新项目用新环境互不干扰。旧环境的坑固定下来新环境的问题自己消化比在一个IDE里同时切换多套JDK省心得多。说到底老项目的价值在于稳定交付而不是追新。老项目维护这件事稳住环境往往比写代码还重要。Eclipse 2020-06配上JDK 1.8虽然看起来是老掉牙的组合但确实是无数生产环境验证过的最佳实践。希望这篇文章能帮你把基础环境一次配好少走我当年走过的弯路。
返回列表