Проблема при запуске проекта JavaFX и JMonkey в Maven - PullRequest
1 голос
/ 12 июня 2019

У нас есть некоторые проблемы с запуском проекта JavaFx и JMonkey в Maven.Проект работает без каких-либо проблем в Gradle.Но когда мы пытаемся запустить его в Maven, мы получаем ошибку «.jar file not found in classpath» во время выполнения.

Для настройки проекта я следовал инструкциям, приведенным в: https://openjfx.io/openjfx-docs/

Однако в проекте используются не только библиотеки openjfx, но и библиотеки jmonkey (для этого не так много документации доступно для Mavensetup).

Я испробовал оба следующих подхода:

  1. JavaFX и Eclipse -> Немодульный с Maven
  2. 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, это будет очень полезно.

...