我有一个运行良好的JAVA SE项目。当我尝试在外部将其用作罐子时,问题就出现了。
我用的是Eclipse氧气。正如您在我的pom中看到的,我的JAVA SE项目使用JDBC4。2.
Oracle doc
国家:
“在以前版本的JDBC中,要获得连接,首先需要
通过调用方法类初始化JDBC驱动程序。forName。“”
此外:
在类路径中找到的任何JDBC 4.0驱动程序都是
自动加载。(但是,您必须手动加载任何驱动程序
JDBC 4.0之前的方法类。forName。)
因此,我不需要编写类。forname(…)在DBConnection类中(请参见下文)。
当我在项目中使用DBConnection时,它工作正常,但是,如果我创建一个jar并尝试将其导入另一个项目中,我会遇到以下异常:“没有找到适合jdbc的驱动程序:postgresql://host:port/dbName“。以下是我创建jar的步骤:
-
mvn清洁安装
-
在新的空的干净工作区中创建新的java项目(TestProject)
-
使用main创建测试类
-
从main调用使用DBConnection的类
-
我没有编译问题(jar中的所有类都已正确加载)
-
当我运行main时,DBConnection类的“getConnection”抛出以下异常:“没有找到适合jdbc的驱动程序:postgresql://host:port/dbName“”
-
如果
我右键单击TestProject->配置->转换为maven项目,然后添加postgres驱动程序依赖项,
一切都很好!!!
。
PostgreSQL驱动程序不应该已经存在于我的jar中吗?为什么要将其添加到用户项目的依赖项中?
以下是DBConnection类的代码:
package generic.util;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class DBConnection {
private static final String FILE_NAME = "db";
private static final String URL = "url";
private static final String USER = "user";
private static final String PASSWORD = "password";
private static Connection conn;
private DBConnection(){
}
public static synchronized Connection getConnection() throws SQLException, ClassNotFoundException, IOException {
if(DBConnection.conn == null || DBConnection.conn.isClosed()){
Properties props = PropertiesReader.readPropertyFile(FILE_NAME);
String url = props.getProperty(URL);
String user = props.getProperty(USER);
String password = props.getProperty(PASSWORD);
Connection conn = DriverManager.getConnection(url, user, password);
DBConnection.conn = conn;
}
return DBConnection.conn;
}
}
以下是我的pom:
<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>groupid</groupId>
<artifactId>artifactid</artifactId>
<version>1.0</version>
<properties>
<skipTests>true</skipTests>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.12.4</version>
<configuration>
<skipTests>${skipTests}</skipTests>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.2.2</version>
</dependency>
</dependencies>
</project>