You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java8编译的SpringBoot2.7.18应用在Java17运行报错,求非升级3.x的方案

解决SpringBoot 2.7.18在Java17下找不到PropertiesLauncher的问题

1. 检查打包配置,确保PropertiesLauncher被正确包含

  • 如果你用Maven的spring-boot-maven-plugin,必须把<layout>设为ZIP——PropertiesLauncher是Spring Boot的特殊启动器,只有指定这个layout,打包时才会把它加入最终的jar包。配置示例:
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <version>2.7.18</version>
        <configuration>
            <layout>ZIP</layout> <!-- 对应PropertiesLauncher的打包格式 -->
        </configuration>
    </plugin>
    
  • 执行mvn clean package重新打包,然后用jar tf your-app.jar | grep PropertiesLauncher命令验证jar包中是否存在该类。

2. 调整Java17启动参数,兼容类加载

  • Java17的模块系统(JPMS)可能限制了Spring Boot loader类的访问权限,启动时添加以下参数试试:
    java --add-opens java.base/java.lang=ALL-UNNAMED -jar your-app.jar
    
  • 如果你的应用用了loader.path指定额外依赖路径,还可以加上--add-modules java.se参数,确保相关类能被正确加载。

3. 更换启动器类为JarLauncher(如果不需要PropertiesLauncher特性)

  • 要是你不需要PropertiesLauncher动态加载额外jar的功能,可以直接换用默认的JarLauncher启动:
    java -cp your-app.jar org.springframework.boot.loader.JarLauncher
    
  • 或者修改打包配置,把<layout>改成JAR,这样打包后默认主类就是JarLauncher,直接用java -jar your-app.jar启动即可。

4. 检查编译配置,确保跨版本兼容

  • 虽然你用Java8编译,但要保证编译参数能让字节码在Java17上正常运行。Maven的compiler-plugin可以这么配置:
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.11.0</version>
        <configuration>
            <source>8</source>
            <target>8</target>
            <release>8</release> <!-- 确保字节码兼容Java8,同时能在Java17运行 -->
            <encoding>UTF-8</encoding>
        </configuration>
    </plugin>
    
  • 避免编译时使用Java8不支持的语法,SpringBoot 2.7.18本身已经适配Java17,所以重点在打包和启动环节。

内容的提问来源于stack exchange,提问作者Santy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:17:02