Не найден подходящий драйвер для jdbc: mysql при запуске из одного jar - PullRequest
4 голосов
/ 11 июля 2011

У меня есть тестовый проект Scala, который записывает некоторую информацию в базу данных mysql. Я настроил проект с помощью sbt и использую sbt-eclipsify, чтобы запустить его из eclipse. Я также использовал плагин sbt sbt-assembly для создания одного jar-файла со всеми необходимыми классами из зависимых jar-файлов. Я могу без проблем запустить программу из eclipse и из sbt.

Я запускаю его из одного jar-файла, который собирает sbt-сборка:

java -classpath target/test1-assembly-1.0-SNAPSHOT.jar example.InsertDataIntoDatabase

но это не с:

Не найден подходящий драйвер для jdbc: mysql: // localhost: 3306 / test

* * 1010

Моей первой мыслью было, что sbt-assembly, возможно, пропустила зависимость от драйвера mysql, но я разархивировал jar-файл и обнаружил внутри него com / mysql / jdbc / Driver.class.

Есть ли какая-то другая зависимость, которую она могла бы пропустить?

Как это можно решить?

Ответы [ 2 ]

2 голосов
/ 22 сентября 2015

Я столкнулся с этой проблемой при использовании плагина sbt-assembly для "uberjar" моего приложения.В моем случае проблема была в потере файла META-INF/services/java.sql.Driver во время процесса сборки.Поэтому мне нужно было изменить конфигурацию сборки, чтобы файл оставался на месте:

assemblyMergeStrategy in assembly := {
  case PathList("META-INF", xs@_*) =>
    xs.map(_.toLowerCase) match {
      case ("manifest.mf" :: Nil) |
           ("index.list" :: Nil) |
           ("dependencies" :: Nil) |
           ("license" :: Nil) |
           ("notice" :: Nil) => MergeStrategy.discard
      case _ => MergeStrategy.first // was 'discard' previousely
    }
  case "reference.conf" => MergeStrategy.concat
  case _ => MergeStrategy.first
}
0 голосов
/ 22 августа 2011

Не могли бы вы привести пример кода инициализации?

Драйверы JDBC обычно требуют загрузки класса драйвера для вызова статического кода инициализации и регистрации его в DriverManager.Для MySQL это можно сделать с помощью:

Class.forName("com.mysql.jdbc.Driver")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...