我有一个工作正常的JAVA SE项目。当我尝试在外部使用它作为一个罐子时会出现问题。
我正在使用Eclipse Oxygen。正如你在我的pom中看到的,我的JAVA SE项目使用JDBC4.2。 Oracle doc州:
"在以前的JDBC版本中,为了获得连接,您首先得到了 通过调用方法Class.forName来初始化JDBC驱动程序。"
此外:
在类路径中找到的任何JDBC 4.0驱动程序都是 自动加载。 (但是,您必须手动加载任何驱动程序 在JDBC 4.0之前使用方法Class.forName。)
因此,我不需要在DBConnection类中编写Class.forname(...)(见下文)。
当我在项目中使用DBConnection时,它可以正常工作,但是,如果我创建一个jar并尝试在另一个项目中导入它,我会得到以下异常:"没有为jdbc找到合适的驱动程序:postgresql: //主机:端口/ DBNAME&#34 ;.以下是我创建jar的步骤:
我的jar中是不是已经存在PostgreSQL驱动程序了?为什么要将它添加到用户项目的依赖项中?
以下是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>
答案 0 :(得分:3)
默认行为不会将dependend库重新打包到创建的工件中。通常,外部库不会像软件那样经常更改,并且将部署到应用程序服务器。
使用微服务,例如spring-boot这已经改变,你可以部署一个包含所有依赖项的.jar文件(包括tomcat)。
您有两种选择: