运行Java jar程序时-classpath指定的jar文件无法识别如何解决
问题根源
使用-jar参数启动Java程序时,JVM会完全忽略命令行传入的-classpath(或简写-cp)配置,仅读取JAR包内META-INF/MANIFEST.MF文件中定义的Class-Path属性加载依赖,这是你配置不生效的核心原因。
解决方案
方案1:修改MANIFEST.MF配置依赖路径
打包DBDemo.jar时,在MANIFEST.MF文件中添加Class-Path配置,指定MySQL驱动的相对路径即可:
Main-Class: dbdemo.DBDemo Class-Path: ./lib/mysql-connector-java.jar
注意文件末尾需要保留空行,此处的路径是执行java命令时的当前目录到驱动包的相对路径,和你现有存储驱动的lib目录位置匹配即可。配置完成后直接执行java -jar DBDemo.jar就能正常启动,不需要额外加-classpath参数。
方案2:不使用-jar参数,手动指定主类启动
把打包好的DBDemo.jar也加入classpath,直接指定主类运行,此时命令行的classpath配置会正常生效,Windows下命令如下:
java -classpath ./lib/mysql-connector-java.jar;./DBDemo.jar dbdemo.DBDemo
如果是Linux/macOS系统,需要把命令中的分号;替换为冒号:。
这个方案不需要修改JAR包内部配置,适合临时测试场景使用。
方案3:将依赖打入同一JAR包
如果不想单独携带lib目录,可以使用构建工具的打包插件(比如Maven的shade插件、Gradle的shadow插件,或者IDE原生的构建配置),将mysql-connector-java的所有类合并打入DBDemo.jar中,最终生成的fat JAR直接用java -jar DBDemo.jar就能运行,不需要额外配置依赖。
内容的提问来源于stack exchange,提问作者KBee
相关产品推荐
相关产品推荐

