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-файле.