2014-09-15 5 views
1

Я сделал код, который подключается к моему sqlite драйверу, который находится в CLASSPATH и читает файл базы данных. Я хочу создать исполняемый файл, который можно использовать на компьютерах, у которых нет драйвера sqlite.Jar executable with sqlite driver

Если я:

jar cvfe exec.jar main_class 

я получить "класс не найден: org.sqlite.JDBC" при работе с

java -jar exec.jar 

Что я должен сделать, чтобы сделать исполняемую работу?

Edit: Я не знаю, если это делает никакой разницы, но это драйвер JDBC я использую:

https://bitbucket.org/xerial/sqlite-jdbc

+0

Вы используете maven/gradle для сборки своей банки? – ponomandr

+0

Не могу это сделать из командной строки? Это должно быть легко, но я не могу найти его нигде. – Magicsowon

+0

Вы должны включить драйвер * внутри * JAR. Вы это делаете? – Zenadix

ответ

2

Yo Вам нужно включить библиотеку внутри JAR. Возможно, вы этого не знаете, но файлы JAR - это только ZIP-файлы, поэтому вы можете легко изменить их содержимое. Вот несколько быстрых инструкций о том, как это сделать. Предположим, что ваш файл JAR называется exec.jar и JAR библиотеки, которую необходимо включить (JAR вы загрузили) является driver.jar

  1. Измените имя файла из exec.jar в exec.zip.
  2. Распакуйте все содержимое exec.zip в папку exec/
  3. Измените имя файла библиотеки из driver.jar в driver.zip
  4. Распакуйте все содержимое driver.zip в папку driver/
  5. Копирование содержимого driver/ в exec/, но сделать не копияMETA-INF папка. Если всплывающее окно спрашивает, нормально ли слияние папок, нажмите «Да».
  6. Сжать все файлы в exec/ в exec.zip
  7. Переименовать exec.zip в exec.jar (заменить оригинал).

Вы можете включить любую библиотеку java внутри JAR, используя этот метод.

+0

Всего несколько вопросов. Водитель имеет только один файл jar. Это то, что должно быть в папке org/sqlite? Или мне нужно извлечь driver.jar? Я сделал оба, но когда я пытаюсь использовать последний файл exec.jar, он говорит, что он поврежден. – Magicsowon

+0

Извлеките driver.jar. Внутри вы найдете папку с именем 'org'. Внутри 'org' вы найдете папку с именем' sqlite'. Скопируйте все содержимое 'sqlite' в свой' exec.jar/org/sqlite'. – Zenadix

+0

Я обновил ответ, надеясь сделать его более понятным. На самом деле все, что вам нужно сделать, это объединить библиотечную банку с вашей банкой. – Zenadix

0

Вот документ:

C:\Windows\System32>jar /? 
Illegal option:/
Usage: jar {ctxui}[vfmn0Me] [jar-file] [manifest-file] [entry-point] [-C dir] files ... 

И так Я думаю, что вам нужна команда:

jar cvfe exec.jar main_class main_class 
+0

Но как мне заставить SQLite работать с исполняемым файлом? – Magicsowon

+0

Я предполагаю, что вы просто передаете команду -classpath arg указанной команде, которая содержит расположение файла SQLite.jar. конечно, это проблема, потому что вы не извлекаете исполняемый файл .jar, и поэтому вы не сможете загрузить ресурс. Есть способ справиться с этим, просто не знаю точно.Есть плагин Maven, который сделает это. – djangofan

Смежные вопросы