如何解决我无法从模块化maven项目在IntelliJ中的测试目录中运行我的应用程序
我正在编程一些Java类,其他模块将使用这些Java类在JavaFX 14.0.1中显示google map。这些Java类不是独立的应用程序,因此我需要在我的测试文件夹中使用一个应用程序Java类来初始化和使用我提到的地图类(该应用程序类仅适用于我/开发)。但是,从测试目录运行应用程序类会导致错误,我无法摆脱。我正在使用maven 3,IntelliJ,JavaFX 14.0.1,并且我的项目是模块化maven项目。这意味着我的源代码中有一个module-info.java文件。
这是我的项目文件结构:
myProject
---.idea
---logs
---src
------main
----------java (marked as Sources Root)
---------------ch.XXXX.gmapsfx
--------------------someMapClass1.java
---------------module-info.java
------test
----------java (marked as Test Sources Root)
---------------ch.XXXX.test.gmapsfx
--------------------GMapsFXApp.java
---pom.xml
---myProject.iml
当我之前在ch.XXXX.gmapsfx包中使用GMapsFXApp时,一切正常。但是现在,当我想在ch.XXXX.test.gmapsfx中运行它时,出现以下错误:
Caused by: java.lang.IllegalAccessError: superclass access check failed: class com.sun.javafx.scene.control.ControlHelper (in unnamed module @0x23c2d7a9) cannot access class com.sun.javafx.scene.layout.RegionHelper (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.scene.layout to unnamed module @0x23c2d7a9
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:821)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:719)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:642)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:600)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
at javafx.scene.control.Control.<clinit>(Control.java:86)
at ch.eswitch.test.XXXX.GMapsFXApp.start(GMapsFXApp.java:25)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
Exception running application ch.XXXX.test.gmapsfx.GMapsFXApp
module-info.java:
module myProject {
requires javafx.graphics;
requires javafx.controls;
requires javafx.fxml;
requires javafx.web;
requires javafx.swing;
requires de.jensd.fx.glyphs.materialicons;
requires org.controlsfx.controls;
requires GMapsFX;
requires yyyy;
requires jdk.jsobject;
opens ch.XXXX.gmapsfx to javafx.fxml;
opens ch.XXXX.gmapsfx.html;
exports ch.XXXX.gmapsfx;
}
在阅读了无数有关类似错误(但上下文不相同)的文章之后,我认为它与类路径和模块路径有关,但是我对这些路径的含义及其含义仍然感到困惑。我曾尝试在IntelliJ中修改VM Options,但并不能解决我的问题。我尝试了maven-surefire-plugin,但是没有用。也许我以错误的方式尝试了它们,或者我在这里完全走错了路。预先感谢您的回答,如果您需要更多信息,请告诉我。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。