У нас есть некоторые проблемы с запуском проекта JavaFx и JMonkey в Maven.Проект работает без каких-либо проблем в Gradle.Но когда мы пытаемся запустить его в Maven, мы получаем ошибку «.jar file not found in classpath» во время выполнения.
Для настройки проекта я следовал инструкциям, приведенным в: https://openjfx.io/openjfx-docs/
Однако в проекте используются не только библиотеки openjfx, но и библиотеки jmonkey (для этого не так много документации доступно для Mavensetup).
Я испробовал оба следующих подхода:
- JavaFX и Eclipse -> Немодульный с Maven
- JavaFX и Eclipse -> Модульныйс Maven
Случай 1: Когда я пробую Метод 1, немодульный с Maven (проект не имеет файла module-info.java), все зависимости Maven находятся под ModulePath, вместо этогоClassPath, автоматически.Я не смог выяснить, почему это происходит, но это, вероятно, связано с тем, что JavaFX добавлен в проект в качестве внешних модулей, поскольку они больше не являются частью JDK.И когда в модульном пути есть библиотеки, они не могут иметь общие пакеты.Но это не относится к большинству библиотек в MavenDependencies.
Так что в случае метода 1 я получаю ошибку, подобную следующей:
java.lang.module.ResolutionException: Both Modules A and B export some package to module C
Случай 2: ВМетод 2, модульный с Maven, проект содержит module-info.java, и мы указываем необходимые модули, используемые проектом.Так что это включает в себя все модули javafx, и из jmonkey мы включаем модуль jme3.core и модуль моста jme-jfx.
В этом случае проект собирается успешно, но во время выполнения мы получаем следующую ошибку:
SEVERE: Failed to find a JmeSystem delegate!
Ensure either desktop or android jME3 jar is in the classpath.
Exception in thread "Thread-3" java.lang.NullPointerException
at jme3.core@3.2.3-stable/com.jme3.system.JmeSystem.newContext(JmeSystem.java:159)
at jme3.core@3.2.3-stable/com.jme3.app.LegacyApplication.start(LegacyApplication.java:461)
at jme3.core@3.2.3-stable/com.jme3.app.LegacyApplication.start(LegacyApplication.java:424)
at jme3.core@3.2.3-stable/com.jme3.app.SimpleApplication.start(SimpleApplication.java:125)
at java.base/java.lang.Thread.run(Thread.java:835)
Но jme3-desktop.jar доступен в classpath и игнорируется, потому что в MODULEPATH присутствует связанный jar jme3-core.jar.Я прочитал в другом сообщении stackoverflow, что в таких сценариях javac игнорирует classpath и рассматривает только modulepath.Чтобы исправить эту проблему, я попытался включить jme3.desktop также в module-info.java, но это не разрешено, поскольку и jme3.core, и jme3.desktop имеют общие пакеты.
Если кто-нибудь может дать некоторые рекомендации о том, как правильно настроить проект с помощью Maven, это будет очень полезно.