我想使用运行/调试配置从IntelliJ IDEA运行HelloWorld JavaFX 11 application using Maven,以便能够调试应用程序。
我已经在IntelliJ IDEA中使用pom.xml和HelloFX.java创建了一个Maven项目。
我可以成功构建项目并运行它以执行指定的compile
和exec:java
目标。
但是当我使用带有VM选项--add-modules=javafx.controls
的运行/调试配置运行它时,我得到:
启动层初始化期间发生错误
java.lang.module.FindException:找不到模块javafx.controls
我设法运行它的唯一方法是下载a JavaFX runtime并将VM选项设置为--module-path /path/to/javafx-sdk-11/lib --add-modules=javafx.controls
。
但是可以使用从Maven下载的工件来运行它吗?正如我认为的,IntelliJ IDEA可以在运行时使用Maven工件。还是我只是出了点问题?
P.S。我知道this answer,但没有说明我要做什么。
答案 0 :(得分:3)
我想我可能终于找到了解决方案。
我假设您正在使用Maven导入javafx-maven-plugin以及javafx-controls依赖项,就像我正在尝试做的(最终,jona303的答案DID N'T修复)那样,您在使用javafx:run尝试运行它时遇到了麻烦/烦恼。
嗯,不使用--add-exports和其他方法的解决方案实际上非常简单。使用正确的,基于Java的main方法创建一个额外的类(我称为我的“ Launcher”)。然后,在该类中,从那里启动您的应用程序,如下所示:
发射器类
public class Launcher {
public static void main(String[] args) {
Application.launch(App.class, args);
}
}
应用程序类
public class App extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
// app code
}
}
我很确定问题是由IntelliJ试图变得“智能”,并在没有主要方法的情况下启动应用程序而引起的,直接跳至start方法。但是这样做,可以避免添加Maven依赖项并导致失败。当您以这种方式执行操作时,它会迫使IntelliJ说“好吧,我们需要maven依赖项,然后我们可以运行它”,并正确启动它(因为它不知道它是JavaFX项目)。但这只是一个猜测。我所知道的是它对我有用。
花了我绝对的时间才能解决这个问题,但是一旦我将运行配置设置为使用Launcher类而不是App类启动,一切都可以像魅力一样无缝地工作(甚至调试也可以!)。
希望这会有所帮助,并且编码愉快! :)
答案 1 :(得分:0)