Intellij Javafx артефакт - как ты это делаешь?

Я весь день пытался превратить мое приложение javafx в файл jar. Я использую Java 1.7 обновление 7.

У Oracle есть информация, но она разбросана повсюду. Intellij почти выполняет эту работу, но я получаю следующую ошибку:

java.lang.NoClassDefFoundError: javafx/application/Application

Который, кажется, говорит, что мне нужно сказать java, где находится jfxrt.jar... Если я добавлю этот jar к моей информации о пути к классам для сборки манифеста в intellij - ctrl+shift+alt+s -> Artifacts -> вкладка Output Layout -> Class Path, тогда я получаю еще одну ошибку:

 Could not find or load main class com.downloadpinterest.code.Main

Кажется странным включать jfxrt.jar в мой путь к классам, хотя...

Я также пытался создать ant-скрипт, но я чувствую, что IntelliJ находится на 90% пути - и мне просто нужна помощь, чтобы понять, почему мне нужно включить jfxrt.jar, и почему мой класс Main не найден (думаю, мне нужно как-то добавить его в путь к классам?).

Может ли кто-нибудь подсказать мне, что происходит? У меня был базовый графический интерфейс, который до этого работал нормально, но JavaFX, кажется, усложняет жизнь!

2 ответа

Решение

Ваше предположение верно, вам нужно добавить JavaFX в путь к классам.
Это находится в [JDK]/jre/lib/jfxrt.jar,

Чтобы обеспечить JavaFX во время выполнения, вы можете связать его с вашим приложением, как показано в этом руководстве Oracle,или сделать Java 7 Update 6 обязательным требованием для вашего приложения, а затем добавить [JAVA_HOME]/lib/jfxrt.jar в путь к классу при первой возможности приложения.

Первый вариант означает больше работы для вас, но он абсолютно уверен, что все пользователи имеют одинаковую версию библиотеки - и вы также можете объединить JRE, пока вы в ней. Вторая версия не дает такой уверенности, но ее легче реализовать.

В качестве варианта второго варианта - если на самом деле для вас возможно объединение JRE - вы можете просто связать его в своем дистрибутиве и затем включить shell-scripts/batch-file/executetable-wrapper, чтобы ваша программа использовала его. Таким образом, вы получаете полную уверенность в варианте I, лишь с небольшим увеличением сложности по варианту II.

У меня такая же проблема. Но я нашел эту запись в блоге: Упаковка приложений JavaFX 2 в IntelliJ IDEA 12.1, в которой показано, как это сделать в Intellij 12.1

По-видимому, IntelliJ имеет возможность создавать специальный артефакт "JavaFX Application". Он автоматически связывает все, что ему нужно, в вашем jar-файле.

Другие вопросы по тегам