在使Maven中运行JavaFx和JMonkey项目时遇到一些问题。该项目正在运行,在Gradle中没有任何问题。但是,当我们尝试使其在Maven中运行时,在运行时会收到“在类路径中找不到.jar文件”错误。
对于设置项目,我遵循了以下说明: https://openjfx.io/openjfx-docs/
但是,该项目不仅使用openjfx库,而且还使用jmonkey库(因此,有关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在类路径中可用,并被忽略,因为MODULEPATH中存在相关的jar jme3-core.jar。我在另一个stackoverflow帖子中读到,在这种情况下,javac忽略类路径,而仅考虑模块路径。为了解决此问题,我尝试将jme3.desktop也包含在module-info.java中,但这是不允许的,因为jme3.core和jme3.desktop都具有共享包。
如果任何人都可以提供有关如何正确使用Maven设置项目的指导,那将有很大帮助。