java - Maven 缺少 MySQL 依赖项
问题描述
我在 Eclipse 中有一个 Maven 项目(使用 ubuntu),其类 dbtest 可以访问我在 MySQL 中使用 Apache Maven 3.3.9 和 Java 1.8.0_181 的 SQL 表。
当我使用 Eclipse 运行和编译代码时,它运行良好(我确实有一个名为 acm 的数据库,其中“root”作为我的用户名和密码)但是当我使用 Maven 命令创建一个 Jar 时:
mvn 干净安装
我编译它我得到以下错误:
java -cp target/maven-1.jar test.dbtest
start
Class-start
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/acm
End main
我已关注https://stackoverflow.com/questions/1074869/find-oracle-jdbc-并尝试了许多选项,例如 Peter Enis 答案或将编译范围添加到依赖项,但没有一个解决了问题。而且我还下载了mysql-connector-java的jar(我试过很多版本),加到库路径下,还是不行,所以我把解压出来的jar加到路径下,问题依旧。
下面是 dbtest 类和我的 POM 文件。
package test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class dbtest
{
public static void main(String[] args) throws SQLException
{
try
{
System.out.println("start");
//Class.forName("com.mysql.jdbc.Driver");//.newInstance();
System.out.println("Class-start");
Connection connection = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/acm", "root", "root");
System.out.println("connection");
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
System.out.println("statement");
String sql = "SELECT * FROM article_102 limit 4";
ResultSet rs = statement.executeQuery(sql);
System.out.println("article_id | publication_id");
while (rs.next())
System.out.println(rs.getString("article_id") + ", " + rs.getString("publication_id"));
statement.close();
connection.close();
}//try
catch(Exception e){ System. out.println(e.toString());}
System.out.println("End main");
}//main
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>maven</groupId>
<artifactId>maven</artifactId>
<version>1</version>
<name>maven</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
评论,如果我需要这一行,我很疑惑,我Class.forName("com.mysql.jdbc.Driver");//.newInstance();
把它作为评论留下(当我使用它时,我只是得到 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver),因为有人说我应该,而其他人说不会改变。
解决方案
Class.forName("com.mysql.jdbc.Driver").newInstance();
需要按照6.1 使用 JDBC DriverManager 接口连接 MySQL中的说明注册驱动程序。
该错误java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
意味着包含com.mysql.jdbc.Driver
类的 JAR 文件不在类路径中。最简单的修复方法是更改-cp
值:
java -cp path/to/mysql-connector-java.jar:target/maven-1.jar test.dbtest
还有其他方法可以做到这一点,例如使用Maven Shade PluginMANIFEST.MF
使用java -jar
或构建一个 uber jar 。
推荐阅读
- java - 使用递归打印列表的每个可能的子列表
- sql - 查询多个表的第一个条目
- machine-learning - 为什么我的预测误差为零?
- node.js - 当我做 npm install ?这个问题来了,请帮我解决这个问题
- c - 了解 C 预处理器宏的输出与行代码
- typescript - 使用 Visual Studio 2019 和 Webpack 在 TypeScript 文件中未命中断点
- https - 自动化 https 请求的最简单方法
- c++ - 为什么即使我的程序已经有它的值,我仍然得到 0 作为我的程序的答案?(C++)
- python - 如何保存由某些轨迹栏修改的图像?
- angular - 使用 ts-jest 在玩笑中转换 esm 文件时遇到问题