Я создал установщик через install4j для своего приложения, используя банку, созданную из maven. Почему он не может найти основной класс при выполнении .exe?

Вот как я создал файл jar с помощью maven .

Теперь для моего приложения JavaFX я использую Afterburner FX Framework. Теперь мне нужно создать установщик, чтобы это приложение можно было развернуть на других устройствах. Я использую Install4j. Мои шаги:

  1. mvn clean package
  2. скопируйте и вставьте сгенерированный файл jar в другой каталог
  3. добавьте этот каталог в файлы install4j
  4. в Launcher под вызовом Java я выбираю файл jar, а затем выбираю свой основной класс: `BOOT-INF.classes.inc.pabacus.TaskMetrics.TaskMetricsApplication`
  5. Я собираю установщик и запускаю его, устанавливаю в Program files, а затем открываю exe-файл

Но затем появляется диалоговое окно с ошибкой:

java.lang.NoClassDefFoundError: BOOT-INF/classes/inc/pabacus/TaskMetrics/TaskMetricsApplication (неправильное имя: inc/pabacus/TaskMetrics/TaskMetricsApplication)


person Rigo Sarmiento    schedule 10.09.2019    source источник


Ответы (2)


Итак, что я сделал неправильно, так это две вещи:

  1. Первоначально, как и раньше, я пытался использовать JavaFX с Spring Framework - безуспешно. Я больше не использую Spring, но у меня все еще оставался остаток Spring в моем файле pom, из-за чего он помещал файлы в каталог BOOT-INF, когда я упаковывал его в jar. Мне просто нужно было удалить остатки Spring, и каталог boot-inf исчез.

  2. Таким образом, в install4j вы выбираете каталог, который будет содержать файлы, которые вы добавите в свой установщик. В учебниках у них был отдельный каталог lib, который содержал внешние библиотеки. Так что я подумал, что это все, что мне нужно. Я скопировал свои зависимости в папку lib через maven, а затем поместил их в каталог вместе с моей банкой. Итак, это все, что было в моем каталоге - файл jar и папка lib. Это не работает. Я не знал. По-видимому, ему нужны все файлы внутри целевой папки, сгенерированные maven. Я должен был просто использовать саму целевую папку.

Итак, у вас есть это. Теперь я успешно создал установщик. Я надеюсь, что никто не ходит так же глупо, как я, но если вы тоже столкнулись с такой же неразберихой, что ж... вот и все.

person Rigo Sarmiento    schedule 13.09.2019
comment
Это мой первый раз, когда я запускаю награду, поэтому я просто комментирую это на всякий случай. Я начал щедрость, прежде чем сам нашел ответ. - person Rigo Sarmiento; 13.09.2019

Вы вроде настроили

BOOT-INF.classes.inc.pabacus.TaskMetrics

в качестве основного класса, когда правильное имя пакета

inc.pabacus.TaskMetrics.TaskMetricsApplication

Кроме того, конфигурация параметров вашей виртуальной машины для средства запуска неверна и включает текст, который можно интерпретировать как основной класс.

person Ingo Kegel    schedule 11.09.2019
comment
Ну в мастере install4j меня попросили выбрать из списка основных классов. BOOT-INF.classes.inc.pabacus.TaskMetrics было все, что у меня было. Я не смог найти inc.pabacus.TaskMetrics.TaskMetricsApplication. Хотя я попробую позже, если это сработает, когда я просто напечатаю это. - person Rigo Sarmiento; 12.09.2019
comment
your VM parameters configuration for the launcher is incorrect and includes text that can be interpreted main class. На самом деле я не добавлял никаких конфигураций параметров ВМ во время запуска install4j. - person Rigo Sarmiento; 12.09.2019
comment
Тогда вы неправильно настроили путь к классу, если это каталог с файлами классов, вам нужно выбрать каталог с корневым пакетом, это родительский каталог inc. - person Ingo Kegel; 12.09.2019
comment
you have to select the directory with the root package Извините, я не совсем понимаю. Я выбрал любой вариант, отображаемый в части вызова Java в разделе Launcher install4j. - person Rigo Sarmiento; 13.09.2019
comment
Вы можете добавить любой каталог к ​​пути к классу, вы должны выбрать правильный с точки зрения пути к классу. - person Ingo Kegel; 13.09.2019