Java Project JAR无法访问Derby驱动程序

Java Project JAR无法访问Derby驱动程序,java,maven,jdbc,derby,embedded-database,Java,Maven,Jdbc,Derby,Embedded Database,我正在从事一个Java项目,我们希望使用一个嵌入式数据库,使用JDBC进行连接,使用Derby作为数据库。这是一个maven项目,它部署到一个可执行JAR 我已经将Derby作为项目的依赖项。 我使用的是Java1.8、Maven 3.8.0和Derby 10.8.3.0 POM.xml <!-- Derby for database connection --> <dependency> <groupId>org.apache.derby</gro

我正在从事一个Java项目,我们希望使用一个嵌入式数据库,使用JDBC进行连接,使用Derby作为数据库。这是一个maven项目,它部署到一个可执行JAR

我已经将Derby作为项目的依赖项。 我使用的是Java1.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>
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驱动程序不是我的类路径的一部分。有没有一种方法可以使用maven或settings.xml文件来实现这一点,从而在用户运行
mvn安装目标时自动实现这一点?

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

java -cp derby-10.8.3.0.jar;target/puzzle.game-0.0.1-SNAPSHOT.jar App
类路径分隔符依赖于操作系统。你可能得调整一下

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

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

org.apache.derby
德比
10.14.2.0

查看此问题的答案:。您需要使用maven assembly插件来创建所谓的fat/uber jar。

当我尝试此操作时,我得到了以下输出:
java.lang.ClassNotFoundException:org.apache.derby.jdbc.EmbeddedDriver
java.sql.SQLException:未找到适合jdbc的驱动程序:derby:sampledb;create=true
请检查您的类路径。如果您的jar不能作为胖jar包含所有依赖项,则必须将derby jar添加到类路径中。这里的问题是用户的类路径。你链接到的手册页面已经有将近15年的历史了。甚至德比10.8也有将近十年的历史了。@BryanPendleton会的!非常感谢。是的,您的问题是类路径问题。是的,derby.jar被设计为嵌入到您的应用程序中。顺便说一下,德比10.8已经很老了。请考虑切换到德比10.14,这是非常新的。
<dependency>
  <groupId>org.apache.derby</groupId>
  <artifactId>derby</artifactId>
  <version>10.14.2.0</version>
</dependency>