2013-03-14 3 views
0

Я пытаюсь экспортировать свою программу в качестве исполняемой банки, упаковывая необходимые библиотеки (Apache POI). Создан .jar, но он не работает. Есть ли уловка при развертывании с этими библиотеками? Потому что сама программа отлично работает от затмения.Runnable jar with Apache POI

+3

Можете ли вы взять нас через шаги, которые вы предприняли для создания JAR? И можете ли вы уточнить, как «это не работает»? –

+0

Export-> Runnable jar-> Extract required libraries-> Finish. Программа запускается, но когда она должна начать использовать библиотеки для чтения файла excel - ничего не происходит. – MustSeeMelons

+0

Любые ошибки в консоли? Вы работаете из командной строки ('java -jar myJAR.jar')? –

ответ

2

Несколько вопросов, чтобы спросить себя в этой ситуации:

  • Где программа не в состоянии? Есть ли ошибки в консоли? Вы работаете из командной строки (java -jar myJAR.jar), чтобы вы могли видеть вывод консоли?
  • Итак, вы получите исключение NullPointerException для файла чтения. Является ли прочитанный файл внутри JAR или где он? Как программа знает, где находится файл чтения?
  • Есть ли проблема с тем, как JAR упакован, или это то, как ваш код находит и читает в файле? Возможно, ваш код предполагает относительное местоположение, которое не может быть разрешено при запуске из JAR.
2

Существуют следующие стратегии.

  1. Создайте свою банку. Поместите его в выбранный каталог. Поместите туда все зависимости вашего приложения. Создайте сценарий (сценарий оболочки, командный файл и т. Д. В зависимости от вашей платформы), где командная строка java либо написана жестко закодированной, либо сгенерирована. Строка должна включать путь класса, например. java -cp myapp.jar;poi.jar com.company.MyMain
  2. Создайте действительно запущенную банку, то есть jar, которая может быть выполнена с использованием команды, например java -jar myapp.jar. Если ваше приложение имеет зависимости, этот баннер должен иметь файл MANIFEEST.MF, определяющий путь к нему с использованием свойства Class-Path
  3. Упакуйте все ваши классы и все ваши зависимости в один большой файл jar.

Очевидно, что все эти операции должны быть автоматизированы либо с использованием собственного сценария, либо с помощью одного из доступных инструментов сборки.