使用运行/调试配置在IntelliJ IDEA中运行JavaFX 11 Maven项目

时间:2018-10-09 15:46:27

标签: java maven intellij-idea javafx java-11

我想使用运行/调试配置从IntelliJ IDEA运行HelloWorld JavaFX 11 application using Maven,以便能够调试应用程序。

我已经在IntelliJ IDEA中使用pom.xmlHelloFX.java创建了一个Maven项目。 我可以成功构建项目并运行它以执行指定的compileexec: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,但没有说明我要做什么。

2 个答案:

答案 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)

如果只是要使用运行/调试按钮,则可以使用Maven配置 maven config for intelliJ JavaFX run