java.lang.IllegalArgumentException: 不支持的类文件主版本59。

14

我正在使用Java RESTful Web服务开展我的第一个项目,但是我遇到了一些问题。当我使用Tomcat运行服务器并输入GET服务的URL时,我收到一个HTTP状态500 - 内部服务器错误。我已经进行了数小时的研究,但找不到任何问题所在。也许pom.xml文件中存在某些问题。

以下是一些代码:

ResourceConfig:

package nl.hu.bep.IPASS.Config;

import javax.ws.rs.ApplicationPath;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.filter.RolesAllowedDynamicFeature;

@ApplicationPath("/restservices")
public class JerseyConfig extends ResourceConfig {

    public JerseyConfig(){
        packages("nl.hu.bep.IPASS.webservices");


    }
}

资源代码:

import nl.hu.bep.IPASS.model.Product;
import nl.hu.bep.IPASS.model.ProductBeheer;


import javax.ws.rs.*;
import javax.ws.rs.core.Response;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

@Path("/producten")
public class ProductResource {
    @GET
    @Produces("application/json")
    public Response getProducten(){
        ProductBeheer beheer = ProductBeheer.getInstance();

        return Response.ok(beheer.getAlleProducten()).build();

    }

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>nl.hu.bep.IPASS</groupId>
  <artifactId>SD_IPASS_2021</artifactId>
  <version>1.0</version>
  <packaging>war</packaging>

  <name>SD_IPASS_2021</name>


  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>15</maven.compiler.source>
    <maven.compiler.target>15</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.json</artifactId>
      <version>1.0.4</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.inject</groupId>
      <artifactId>jersey-hk2</artifactId>
      <version>2.30.1</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.containers</groupId>
      <artifactId>jersey-container-servlet</artifactId>
      <version>2.30.1</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-json-jackson</artifactId>
      <version>2.30.1</version>
    </dependency>
    <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.2.20</version>
    </dependency>
    <dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.1</version>
    </dependency>


    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-blob</artifactId>
      <version>12.6.0</version>
    </dependency>




    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter</artifactId>
      <version>5.6.3</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>
  </dependencies>

  <build>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle -->

        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>


      </plugins>
    </pluginManagement>
  </build>
</project>

错误:

错误截图

有人可以帮助我吗,请?


2
问: "我研究了几个小时,但仍然找不到任何东西。" 你只需要在Google上搜索错误信息:java.lang.IllegalArgumentException: Unsupported class file major version 59。你正在运行的JVM不支持您尝试加载的类文件。具体来说,“59”是Java 15:https://javaalmanac.io/bytecode/versions/。因此,要么1)找到旧的.jar文件,要么2)运行更新的JVM。 - paulsm4
1
当我在谷歌上搜索错误信息时,这是第一个结果。 - Adam Burley
3个回答

18

在构建Flutter项目的Android release apk时,我遇到了同样的错误,我通过添加以下内容解决了这个问题:

android.jetifier.blacklist=bcprov-jdk15on

gradle.properties 文件中进行更改并重新构建项目,对我很有用。

如果这对你有用那就很好,否则你可以参考 github 上的这个问题herethis


1
这个指令解决了我在Flutter项目中的问题。在添加这个指令之前,发布构建一直失败。 - bulgarian-beast

7
您创建了无法被JDK14及以下版本读取的类文件,您至少需要JDK15。这就是“59”的含义(它是由JDK15发出的类文件格式版本)。
您有两个选择:

降级

<maven.compiler.source>15</maven.compiler.source>降低到一个更低的版本,至少与您在服务器上安装的JDK版本相同。

升级

将服务器升级为运行JDK15或更高版本。具体而言,在运行tomcat时,某些地方会运行Java可执行文件。那必须是JDK15(您可以在一个系统上安装多个JDK - 没问题,但用于运行tomcat的必须是15或更高版本)。

3
请记住,Oracle不喜欢开发人员 - Java 12到Java 15已经过了支持期。 Java 11是一个“长期支持”版本。如果你的代码是用于生产环境的,现在应该考虑使用Java 11,直到2021年9月发布Java 17为止。 - stdunbar
1
谢谢回复。我查看了我的项目中Tomcat运行的JDK版本,似乎是在JDK15上运行。然而,我发现当我刷新错误页面几次后它就可以工作了。非常奇怪。 - programmer_66
@programmer_66 "几次" 没有意义。 "一次" - 这表明您过去在太低版本上运行它,但现在不再这样做,并且缓存配置已损坏。 (请注意,“没有缓存配置计数”是指发生了缓存,因此重新加载“修复”它)。 您需要研究缓存指令来解决此问题。 - rzwitserloot

1
我是一个有用的助手,可以为您翻译文本。以下是需要翻译的内容:

如何解决这个问题,在mac上使用,点击屏幕左上角的Android Studio,然后点击Preferences

enter image description here

点击Build, Execution, Deployment,点击Build Tools并选择Gradle。 在Gradle JDK处,单击下拉菜单并选择任何低于15Embedded JDK,例如,我使用的是11.0.13

enter image description here

然后点击ApplyOk

现在应该没问题了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接