解决 org.eclipse.jface.text.Document class file version 61.0 报错

问题描述

运行好好的项目,没有做任何改动,最近在编译时报以下错误

java.lang.UnsupportedClassVersionError: org/eclipse/jface/text/Document has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 55.0

大概意思是org.eclipse.jface.text.Document是Java17编译的,而当前运行环境是Java11,这就奇怪了,工程的POM依赖也没变过,自己也没使用过Java17,怎么会引入Java17的类。

问题排查

首先找到这个jar包被依赖的地方

<dependency>
    <groupId>org.eclipse.jdtgroupId>
    <artifactId>org.eclipse.jdt.coreartifactId>
    <version>3.29.0version>
dependency>

再进去org.eclipse.jdt.core的pom查看,发现了org.eclipse.text的依赖版本是从 >= 3.6.0, < 4.0.0
之间的一个最新版本

<dependency>
  <groupId>org.eclipse.platformgroupId>
  <artifactId>org.eclipse.core.resourcesartifactId>
  <version>[3.14.0,4.0.0)version>
dependency>
<dependency>
  <groupId>org.eclipse.platformgroupId>
  <artifactId>org.eclipse.core.runtimeartifactId>
  <version>[3.13.0,4.0.0)version>
dependency>
<dependency>
  <groupId>org.eclipse.platformgroupId>
  <artifactId>org.eclipse.core.filesystemartifactId>
  <version>[1.7.0,2.0.0)version>
dependency>
<dependency>
  <groupId>org.eclipse.platformgroupId>
  <artifactId>org.eclipse.textartifactId>
  <version>[3.6.0,4.0.0)version>
dependency>

再到本地的Maven仓找一下这个jar包,此时最新的是3.13.0,具体路径如下:
\org\eclipse\platform\org.eclipse.text\3.13.0\org.eclipse.text-3.13.0.jar

用解压工具打开这个jar包,查看\META-INF\MANIFEST.MF文件,发现确实是Java17编译的
解决 org.eclipse.jface.text.Document class file version 61.0 报错_第1张图片
然后,官网也打开看了下,确实最近的版本已经是基于Java17的了
解决 org.eclipse.jface.text.Document class file version 61.0 报错_第2张图片

问题解决

知道了这个原因,限定使用Java11版本的相关组件就可以了:

<dependency>
    <groupId>org.eclipse.jdtgroupId>
    <artifactId>org.eclipse.jdt.coreartifactId>
    <version>${eclipse-jdt-core.version}version>
    <exclusions>
        <exclusion>
           <groupId>org.eclipse.platformgroupId>
           <artifactId>*artifactId>
        exclusion>
    exclusions>
dependency>
<dependency>
    <groupId>org.eclipse.platformgroupId>
    <artifactId>org.eclipse.core.resourcesartifactId>
    <version>3.18.200version>
dependency>
<dependency>
    <groupId>org.eclipse.platformgroupId>
    <artifactId>org.eclipse.core.runtimeartifactId>
    <version>3.26.100version>
dependency>
<dependency>
    <groupId>org.eclipse.platformgroupId>
    <artifactId>org.eclipse.core.filesystemartifactId>
    <version>1.10.0version>
dependency>
<dependency>
    <groupId>org.eclipse.platformgroupId>
    <artifactId>org.eclipse.textartifactId>
    <version>3.12.300version>
dependency>

最后

感觉如果换JDK这么大改动的话,起码版本要升一个高一点的吧,比如4.x, 或者不要使用版本范围。这么搞一下,有点不厚道啊。

你可能感兴趣的:(eclipse,java,maven)