pok*_*ero 10 java mysql eclipse maven
我有一个基于Maven的Java应用程序,并希望连接到MySQL服务器.
我的pom有:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
<type>jar</type>
<scope>runtime</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在运行时,因为我想在运行时连接到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);
}
Run Code Online (Sandbox Code Playgroud)
当我从Eclipse运行它时,它工作正常并打印表名.
但是,从maven开始,生成的SNAPSHOT java -jar target\File.jar在运行后通过>执行时总是会出错mvn clean install.
java.lang.ClassNotFoundException:com.mysql.jdbc.Driver
为了让maven构建起作用,我在这里缺少什么?运行mvn clean install没有错误,并且构建正常.只有在执行SNAPSHOT exe时才会发生错误.
MySQL jar在我的.m2 repo中,我尝试通过mvn命令行显式添加它,但是它已经存在了.
JBA*_*JBA 15
将范围更改为compile:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
哪个 - 因为它是默认范围对应于完全忽略范围定义 - 类型的相同计数:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
看看这个:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html了解有关范围的详细信息.
以下是您的背景信息:
您指定JDBC驱动程序具有范围runtime.大多数IDE都会忽略这些范围并将所有依赖项添加到它们的类路径中(例如,当你在eclipse之外运行某些东西时使用的类路径.通过范围,runtime你告诉maven它必须不会将该依赖包装到你的最终jar中,因为执行环境将"提供依赖性runtime.例如,您在调用jar时必须手动将其添加到类路径中,或者更改范围,compile以便将jar驱动程序包装在jar中并在运行时可用.