如何使用JDK 11 / Maven / Eclipse IDE运行JavaFX应用程序

时间:2019-06-10 14:35:18

标签: eclipse maven javafx

问题:从Eclipse IDE运行基于Maven非模块项目(项目名称=“ howdyjfx”)的JavaFX应用程序会产生以下编译错误:

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project howdyjfx: The parameters 'mainClass' for goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java are missing or invalid.

开发环境和配置:

  • 操作系统:Windows 10
  • IDE :Eclipse 2019-03(4.11.0)
  • 已安装JDK :jdk-11.0.3,这是默认的(也是唯一的)JDK 安装在工作区中。该项目的构建路径是Java SE-11 (jdk-11.0.3)。由于Eclipse需要Java 1.8 JRE,因此jdk1.8.0_211 也安装在我的计算机上;没有这个,Eclipse将无法运行。
  • Builder :所有项目都是非模块化的,并使用Maven进行了编译。 Eclipse通过其内置的m2e功能来处理此问题。
  • Pom :这是pom的摘录:
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.spindotta.jfx11.testbed</groupId>
    <artifactId>howdyjfx</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-controls -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>13-ea+8</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.openjfx/javafx-fxml -->
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-fxml</artifactId>
            <version>13-ea+8</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <!-- http://maven.apache.org/plugins/maven-compiler-plugin/ -->
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>3.0.1</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.2</version>

                <configuration>
                    <!-- Is this necessary? The 'Run' configuration goals are "clean exec:java" -->
                    <executable>C:\Program Files\Java\jdk-11.0.3\bin\java</executable>

                    <!-- Workaround to short-circuit jdk1.8 which is needed to run Eclipse 
                        but is toxic for jdk11 and higher -->
                    <options>
                        <option>-Djava.library.path=C:\tmp</option>
                    </options>

                    <!-- Main class - is this correct? -->
                    <mainClass>com.spindotta.jfx11.testbed.howdyjfx.HowdyJFX</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>

应用程序代码为:

    public class HowdyJFX extends Application {

         @Override
         public void start(Stage primaryStage) throws Exception {
              final String javaVersion = System.getProperty("java.version");
              final String javafxVersion = System.getProperty("javafx.version");
              final Label l = new Label("Hello, JavaFX " + javafxVersion + ", running on Java " + javaVersion + ".");
              final Scene scene = new Scene(new StackPane(l), 640, 480);
              primaryStage.setScene(scene);
              primaryStage.show();
          }

         public static void main(String[] args) {
             launch();
         }
    }

以上配置和代码基于'Getting Started' guideSr. Jose Pereda's Github post,也基于去年9月询问的similar question的答案。但是,无论出于何种原因,我都无法正常工作。这更加令人沮丧,因为我正在整理一个广泛的JFX控件库,这些库可以毫无问题地进行编译(同时使用JDK 11和JavaFX 11)并且可以在Scene Builder中正常工作(除了一些与此处无关的Scene Builder问题) )。

在此先感谢您提供任何有用的建议!

1 个答案:

答案 0 :(得分:0)

pom文件中的配置是正确的,但是<configuration>的{​​{1}}部分中的主类规范是错误的。 在“入门”指南和Github存储库中的资料中,javafx-maven-plugin的名称为mainClass,它是‘ org.openjfx.hellofx.App加上<groupId>的组合加上<artifactId>。因为我项目的simple class name<groupId>分别是<artifactId>com.spindotta.jfx11.testbed,所以我将它们与howdyjfx结合在一起。这是不正确的,因为该项目具有标准的Maven配置simple class name HowdyJFX以及顶级文件夹source/main/java。在插件中将howdyjfx指定为howdyjfx/HowdyJFX即可解决问题。

就其价值而言,在mainClass中为<configuration>指定的项目是必不可少的;省略任何将生成javafx-maven-plugin。尽管我发现使用模板在ERROR中更容易处理,但应该可以在Run configurations -> JRE tab -> VM arguments中指定这些值。

感谢何塞·佩雷达(Jose Pereda)澄清了pom的问题,该问题必须在Goals中指定才能启动。

现在还有另一个问题。我需要能够调试Getting Started guideGithub repo中建议的方法启动的JavaFX应用程序。我在分配变量的第一行的Run configurations中设置了一个Eclipse断点,以便应用程序会在该点停止,这不会发生。而是运行应用程序,好像断点不在那里。 这是一个与即将发生的问题不同的问题,并提出了elsewhere