命令行运行Maven Kotlin Ktor项目遇java.sql.Driver类找不到错误
解决Java 11下Ktor项目命令行运行时
java.sql.Driver找不到的问题 针对你遇到的ClassNotFoundException: java.sql.Driver错误,提供以下几种可行的解决方法:
1. 修正类路径与启动命令
- 确保
mysql-connector-java-8.0.30.jar在当前执行命令的目录下,或者使用绝对路径指定jar位置:kotlin -cp /绝对路径/mysql-connector-java-8.0.30.jar:/绝对路径/dev_meet_dev_api.jar MainClassKt - 由于Java 11是模块化环境,需显式添加MySQL驱动模块,修改启动命令:
kotlin --add-modules mysql.connector.java -cp mysql-connector-java-8.0.30.jar:dev_meet_dev_api.jar MainClassKt
2. 打包包含所有依赖的可执行Jar(推荐)
使用Maven的maven-shade-plugin将项目代码与依赖打包成一个Jar,避免手动管理类路径:
在你的pom.xml中添加以下插件配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>MainClassKt</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
执行打包命令:
mvn clean package
打包完成后,运行生成的带依赖Jar(文件名通常为dev_meet_dev_api-<版本号>-shaded.jar):
java -jar dev_meet_dev_api-1.0-SNAPSHOT-shaded.jar
3. 修正JDBC驱动加载逻辑
- MySQL 8.0的驱动类为
com.mysql.cj.jdbc.Driver,而非旧的java.sql.Driver(后者是接口)。确保代码中没有错误地加载旧类名:// 正确的加载方式(JDBC 4.0+可省略此步骤,驱动会自动注册) Class.forName("com.mysql.cj.jdbc.Driver") - 从JDBC 4.0开始,只要驱动在类路径中,会自动注册,可移除手动加载的代码。
内容的提问来源于stack exchange,提问作者Ahsan Saeed
相关产品推荐
相关产品推荐

