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

Java 8迁移至Java 17:jdk8/jre/lib/ext依赖替代及启动问题

解决Java 17中依赖abc.jar无法加载的问题

Java 9及以后版本彻底移除了Java 8里的jdk/jre/lib/ext扩展目录机制,而且你用java -classpath ... -jar ...的启动方式本身就有问题——当使用-jar参数时,JVM会忽略-classpath设置,转而读取目标jar包(myapp.jar)的Manifest文件中配置的类路径。

下面是几种可行的解决办法:

  • 修改myapp.jar的Manifest文件,添加依赖路径

    1. 先解压myapp.jar中的META-INF/MANIFEST.MF文件到本地目录
    2. 在Manifest文件末尾添加一行:Class-Path: my_path/abc.jar(路径可以是绝对路径,也可以是相对于myapp.jar的相对路径,多个依赖用空格分隔)
    3. 重新打包myapp.jar,命令示例:
      jar cfm myapp.jar META-INF/MANIFEST.MF -C 原myapp解压后的类文件目录 .
      

    之后直接用java -jar my_path/myapp.jar启动即可。

  • 直接指定主类启动,不用-jar参数
    先找到myapp.jar中定义的主类(比如Manifest里的Main-Class字段值,假设是com.example.MyAppMain),然后用类路径包含两个jar的方式启动:

    # Linux/macOS用冒号分隔
    java -classpath "my_path/abc.jar:my_path/myapp.jar" com.example.MyAppMain
    
    # Windows用分号分隔
    java -classpath "my_path/abc.jar;my_path/myapp.jar" com.example.MyAppMain
    
  • 如果应用是模块化项目,用模块化参数启动
    如果你的myapp.jar是模块化jar(包含module-info.class),可以用--module-path指定模块路径,结合--module指定主模块和主类:

    java --module-path "my_path/abc.jar:my_path/myapp.jar" --module 你的模块名/主类全限定名
    

注意:确保路径中的空格、特殊字符正确转义,或者用引号包裹路径;相对路径要以myapp.jar的启动位置为基准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 22:52:05