【已解决】导入的SpringBoot项目启动时报:Java HotSpot(TM) 64-Bit Server VM warning Options -Xverifynone and……

【已解决】导入的SpringBoot项目启动时报错:Java HotSpot™ 64-Bit Server VM warning: Options -Xverify:none and -noverify were deprecated in JDK 13 and will likely be removed in a future release.

这个警告信息表明在启动Java项目时使用了 -Xverify:none-noverify 选项,而这些选项在JDK 13中已被弃用,并可能在未来的版本中被移除。

原因

-Xverify:none-noverify 是用于禁用字节码验证的JVM选项。字节码验证是Java虚拟机(JVM)在加载类时进行的一项安全检查,确保字节码是有效的且不会破坏JVM的安全性。禁用字节码验证可以加快类加载速度,但会降低安全性。

解决方案

最简单的方式:改用较低的JDK版本,如JDK8

修改完JDK后运行可能仍会接着报如下错误:

错误: 加载主类 com.hmdp.HmDianPingApplication 时出现 LinkageError java.lang.UnsupportedClassVersionError: com/hmdp/HmDianPingApplication 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

这个错误是因为用的Java运行时环境(JRE)版本较旧(class file version 55.0,即JDK 11),但是却尝试运行一个由较新版本的Java编译的类文件(class file version 61.0,即JDK 17),无法识别该类的字节码格式。

原因

Java的类文件版本与JDK版本是绑定的。每个JDK版本都有一个对应的类文件版本号。以下是常见的JDK版本与类文件版本的对应关系:

JDK 版本类文件版本号
JDK 852
JDK 953
JDK 1054
JDK 1155
JDK 1256
JDK 1357
JDK 1458
JDK 1559
JDK 1660
JDK 1761
JDK 1862
JDK 1963
JDK 2064

从错误信息可以看出:

  • 类文件是用JDK 17(类文件版本 61.0)编译的。
  • 当前运行的JRE是JDK 11(类文件版本 55.0),它无法加载JDK 17编译的类文件。
解决方案
1. 使用与JRE版本匹配的JDK重新编译

如果你无法升级JRE版本,可以将项目重新编译为与当前JRE版本兼容的类文件版本。

步骤

  1. 确保你使用的JDK版本与目标JRE版本一致。例如,如果目标JRE是JDK 11,则使用JDK 11重新编译项目。

  2. 在编译时指定目标字节码版本:

    • 如果你使用的是Maven,可以在 pom.xml 中配置 maven-compiler-plugin

      xml

      复制

      <build>
          <plugins>
              <plugin>
                  <groupId>org.apache.maven.plugins</groupId>
                  <artifactId>maven-compiler-plugin</artifactId>
                  <version>3.8.1</version>
                  <configuration>
                      <source>1.8</source>
                      <target>1.8</target>
                  </configuration>
              </plugin>
          </plugins>
      </build>
      

      运行 HTML

    • 如果你使用的是Gradle,可以在 build.gradle 中配置:

      groovy

      复制

      java {
          sourceCompatibility = JavaVersion.VERSION_11
          targetCompatibility = JavaVersion.VERSION_11
      }
      
  3. 重新编译项目并运行。

2. 检查IDE配置

如果你在IDE(如IntelliJ IDEA或Eclipse)中运行项目,确保IDE使用的JDK版本与项目编译版本一致。

步骤

  1. 打开IDE设置,找到 Project StructureBuild Path
  2. 确保项目的 Project SDKProject Language Level 与编译版本一致(例如JDK 17)。
  3. 重新构建项目并运行。
3. 检查运行环境

如果你在服务器或容器中运行项目,确保运行环境的JDK版本与编译版本一致。

步骤

  1. 检查服务器或容器的JDK版本:
    • 运行 java -version 查看当前JDK版本。
  2. 如果版本不匹配,安装或切换到正确的JDK版本。

到此,问题解决,项目成功运行


若仍未解决,也可以考虑以下几点:

  1. 移除或替换这些选项
    • 如果在启动脚本或配置文件中使用了 -Xverify:none-noverify,建议将它们移除。这些选项在现代JDK版本中已经不再推荐使用。
    • 如果你确实需要加快类加载速度,可以考虑其他优化手段,比如使用类数据共享(CDS)或应用层级的优化。
  2. 检查依赖项
    • 某些第三方库或框架可能会在内部使用这些选项。检查项目依赖项,确保它们与较新的JDK版本兼容。如果有不兼容的依赖项,考虑升级或替换它们。
  3. 使用替代方案
    • 如果你确实需要禁用字节码验证(不推荐),可以考虑使用 -XX:-UseSplitVerifier 或其他相关选项,但这些选项也可能在未来被移除。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值