问题:从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.
开发环境和配置:
<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' guide和Sr. Jose Pereda's Github post,也基于去年9月询问的similar question的答案。但是,无论出于何种原因,我都无法正常工作。这更加令人沮丧,因为我正在整理一个广泛的JFX控件库,这些库可以毫无问题地进行编译(同时使用JDK 11和JavaFX 11)并且可以在Scene Builder中正常工作(除了一些与此处无关的Scene Builder问题) )。
在此先感谢您提供任何有用的建议!
答案 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 guide和Github repo中建议的方法启动的JavaFX应用程序。我在分配变量的第一行的Run configurations
中设置了一个Eclipse
断点,以便应用程序会在该点停止,这不会发生。而是运行应用程序,好像断点不在那里。
这是一个与即将发生的问题不同的问题,并提出了elsewhere。