Project JAR не может получить доступ к драйверу Derby - PullRequest
0 голосов
/ 16 февраля 2019

Я работаю над проектом Java, в котором мы хотим использовать встроенную базу данных, используя JDBC для соединения и Derby в качестве базы данных.Это проект maven, который развертывается в исполняемый файл JAR.

Я включил 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 не является частьюмоего класса пути.Есть ли способ сделать это, используя файл maven или файл settings.xml, чтобы это происходило автоматически, когда пользователь запускает цель mvn install?

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

См. Ответ на этот вопрос: Создание толстой банки с помощью maven .Вам необходимо использовать плагин сборки maven, чтобы создать так называемый fat / uber jar.

0 голосов
/ 16 февраля 2019

При запуске приложения вам понадобится derby-10.8.3.0.jar в вашем classpath.

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

Разделитель пути к классу зависит от ОС.Возможно, вам придется настроить это.

Как уже упоминал Брайан Пендлтон, вам следует использовать текущий релиз Derby.

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