【问题标题】:Run a JavaFX 11 Maven project in IntelliJ IDEA using a run/debug configuration使用运行/调试配置在 IntelliJ IDEA 中运行 JavaFX 11 Maven 项目
【发布时间】:2019-03-14 10:57:46
【问题描述】:

我想使用 运行/调试配置从 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 工件一样。还是我只是弄错了什么?

附:我知道this answer,但它没有描述我想要做什么。

【问题讨论】:

  • 使用模块化 Java 应用程序。
  • @mrmcwolf 但是可以在非模块化应用程序中使用 JavaFX 11 (openjfx.io/openjfx-docs/#install-javafx)。那么为什么我必须使用模块化的呢?
  • exec:java 目标调试(Maven 项目窗口,右键单击 -> 调试 [exec:java]),对我有用,无需添加 SDK。
  • @JoséPereda 谢谢。它也适用于我。但也许你有什么想法为什么Application 类型的配置不起作用(你建议的配置类型是Maven)?它一直适用于我以前的 Maven 项目。
  • @Dfm 我遇到了同样的问题。我创建了另一个运行配置:exec:java -f pom.xml。这失败并出现以下错误:目标 org.codehaus.mojo:exec-maven-plugin:1.6.0:java 的参数“mainClass”丢失或无效.如果我使用主类添加插件配置,则会收到此错误:指定的主类不包含具有适当签名的主方法。

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


【解决方案1】:

我想我可能终于找到了解决办法。

我假设您正在使用 Maven 导入 javafx-maven-plugin 以及 javafx-controls 依赖项,就像我尝试做的那样(最终,jona303 的答案没有修复),并且您在尝试使用 javafx:ru​​n 运行它时遇到了问题/烦恼。

嗯,不使用 --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 试图变得“聪明”,并在没有 main 方法的情况下启动应用程序,直接跳转到 start 方法引起的。但是通过这样做,它以某种方式避免了添加 Maven 依赖项并导致它失败。当你这样做时,它会强制 IntelliJ 说“好的,我们需要 maven 依赖项,然后我们可以运行它”,正确启动它(因为它不知道它是一个 JavaFX 项目)。但这只是一个猜测。我只知道它对我有用。

我花了很长时间才弄清楚这一点,但是一旦我将运行配置设置为使用我的 Launcher 类而不是我的 App 类启动,一切都像魅力一样无缝运行(甚至调试也有效!)。

希望这会有所帮助,祝您编码愉快! :)

【讨论】:

    【解决方案2】:

    如果只是为了使用运行/调试按钮,您可以使用 Maven 配置

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 2013-09-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-27
      相关资源
      最近更新 更多