项目 JAR 无法访问 Derby 驱动程序

Project JAR unable to access Derby Driver

我正在开展一个 Java 项目,我们希望在该项目中使用嵌入式数据库,使用 JDBC 进行连接并使用 Derby 作为数据库。这是一个部署到可执行 JAR 的 Maven 项目。

我已将 Derby 作为项目的依赖项包含在内。 我正在使用 Java 1.8、Maven 3.8.0 和 Derby 10.8.3.0。

POM.xml

<!-- Derby for database connection -->
<dependency>
  <groupId>org.apache.derby</groupId>
  <artifactId>derby</artifactId>
  <version>10.8.3.0</version>
</dependency>

App.java

public class App {

public static void main(String[] args) {
    JOptionPane.showMessageDialog(null, "Hello World.");


    SampleDB sdb = new SampleDB();
    try {
        sdb.connectionToDerby();
        sdb.sampleDBUsabe();
    } catch (SQLException sqle) {
        System.out.println(sqle);
    }
}
}

SampleDB.java

public class SampleDB {
private Connection conn;

public void connectionToDerby() throws SQLException {
    String dbURL = "jdbc:derby:sampledb;create=true";
    conn = DriverManager.getConnection(dbURL);
}

public void sampleDBUsabe() throws SQLException {
    Statement stmt = conn.createStatement();

    //Create Table
    stmt.execute("Create Table USERS (id int primary key, name varchar(30))");
...
}

当我执行生成的 .JAR 文件时出现错误:

$ java -jar target/puzzle.game-0.0.1-SNAPSHOT.jar
java.sql.SQLException: No suitable driver found for jdbc:derby:sampledb;create=true

我怀疑这是因为 Derby 驱动程序不是我的 class 路径的一部分。有没有办法使用 Maven 或 settings.xml 文件来执行此操作,以便在用户运行 mvn install 目标时自动发生这种情况?

启动应用程序时,类路径中需要 derby-10.8.3。0.jar。

java -cp derby-10.8.3.0.jar;target/puzzle.game-0.0.1-SNAPSHOT.jar App

类路径定界符 OS 相关。您可能需要对其进行调整。

正如 Bryan Pendleton 所提到的,您应该使用当前的 Derby 版本。

<dependency>
  <groupId>org.apache.derby</groupId>
  <artifactId>derby</artifactId>
  <version>10.14.2.0</version>
</dependency>

查看此问题的答案:Building a fat jar using maven。您需要使用 Maven 程序集插件才能创建所谓的 fat/uber jar。