Maven – java.lang.ClassNotFoundException:com.mysql.jdbc.Driver
我有一个基于Maven的Java应用程序,并希望连接到MySQL服务器。
我的pom有:
mysql mysql-connector-java 5.1.17 jar runtime
在运行时 ,因为我想在运行时连接到MySQL服务器 – 也尝试编译和提供,但不起作用。
SQL代码是标准的:
String dbClass = "com.mysql.jdbc.Driver"; Class.forName(dbClass); Connection connection = DriverManager.getConnection(dbUrl, username, password); Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(query); while (resultSet.next()) { String tableName = resultSet.getString(1); System.out.println("Table name : " + tableName); }
当我从Eclipse运行它时 ,它工作正常并打印表名。
但是,从maven开始,生成的SNAPSHOT在运行mvn clean install
后通过> java -jar target\File.jar
执行时总是会出错。
java.lang.ClassNotFoundException:com.mysql.jdbc.Driver
我在这里错过了什么让maven构建工作? 运行mvn clean install
没有错误,并且构建正常。 只有在执行SNAPSHOT exe时才会发生错误。
MySQL jar在我的.m2 repo中,我尝试通过mvn命令行显式添加它,但表示它已经存在。
将范围更改为compile
:
mysql mysql-connector-java 5.1.17 jar compile
哪个 – 因为它是默认范围对应于完全忽略范围定义 – 类型的相同计数:
mysql mysql-connector-java 5.1.17
看看这个: https : //maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html获取有关范围的详细信息。
以下是您背景的快速信息:
您指定JDBC驱动程序具有范围runtime
。 大多数IDE都会忽略这些范围并将所有依赖项添加到它们的类路径中(例如,当你在eclipse之外运行某些东西时使用的类路径。通过范围runtime
你告诉maven它不能将这个依赖包装到你的最后一个jar中,因为执行环境将“在runtime
提供该依赖。例如,您在调用jar时必须手动将其添加到类路径中,或者将范围更改为compile
,这将导致驱动程序jar包装在jar中并在运行时可用。
答案就在这里 – 如何使用Maven创建具有依赖关系的可执行JAR?
我需要构建一个超级pom,使用上面链接中的答案 – 这将依赖项(在本例中为mysql jar文件)构建到单个SNAPSHOT jar文件中。
只需确保使用mvn clean compile assembly:single
运行它mvn clean compile assembly:single
(不是通常的mvn clean package
或其他任何东西)。
由于您通过“java -jar”运行项目并且还有依赖项,因此,您必须使用两个maven插件。 第一个是在打包时将依赖项复制到目标文件夹(例如lib /)中的文件夹中,第二个用于指定类路径,它应该与第一个(lib /)相同。 我有同样的问题,这就是我做的:
org.apache.maven.plugins maven-dependency-plugin copy package copy-dependencies ${project.build.directory}/lib org.apache.maven.plugins maven-jar-plugin true lib/ com.tihoo.crawler.Application
我也有这个问题。 我尝试使用插件将连接器设置为classpath,但它不起作用。 我试图改变版本,它没有用。 我花了两个晚上发现我需要在pom.xml中指定我需要我的包是一个“战争”。
也许是因为你的项目不知道它是什么类型,所以试着把它:
war
就在您的项目版本旁边。 像这样的东西:
4.0.0 com.example example-app 1.0-SNAPSHOT war
也许它不适合你的问题,但也许别人会需要它。
添加此代码
mysql mysql-connector-java 5.1.6
到您的maven项目中的porm.xml文件