为什么 Maven 没有看到 JavaFX 图形模块(而 Eclipse 有)

Why does Maven not see JavaFX graphics module (while Eclipse does)

我有一个多模块 Maven 项目,其中一个模块使用 JavaFX。虽然在 Eclipse 中一切都可以正常编译,但执行

mvn clean compile

returns这个错误

package javafx.scene.robot does not exist

似乎 Maven 看不到包含 javafx.scene.robotjavafx.graphics 模块(但 Eclipse 确实看到了,因为它没有给出编译错误)。我怎样才能让 Maven 编译这段代码?

我已经创建了我的应用程序的迷你版本来复制它。这些是文件:

主要pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>nl.eddy</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>   <!-- JDK Version -->
                </configuration>
            </plugin>
        </plugins>
    </build>

    <modules>
        <module>mod1</module>
    </modules>
</project>

模块pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>nl.eddy</groupId>
        <artifactId>demo</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <artifactId>mod1</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>11.0.2</version>
        </dependency>
    </dependencies>

</project>

Launch.java

package nl.eddy.mod1;

import javafx.application.Application;
import javafx.scene.robot.Robot;
import javafx.stage.Stage;

public class Launch extends Application{

    public static void main(String[] args) {

    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        new Robot();
    }

}

模块-info.java

module nl.eddy.mod1 {

    requires javafx.controls;
//  requires javafx.graphics; uncommenting this does not change maven's message
}

mvn clean compile 的输出

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/egr/eclipse-workspace/demo/mod1/src/main/java/nl/eddy/mod1/Launch.java:[4,26] package javafx.scene.robot does not exist
[ERROR] /C:/Users/egr/eclipse-workspace/demo/mod1/src/main/java/nl/eddy/mod1/Launch.java:[15,21] cannot find symbol
  symbol:   class Robot
  location: class nl.eddy.mod1.Launch
[INFO] 2 errors
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for demo 0.0.1-SNAPSHOT:
[INFO]
[INFO] demo ............................................... SUCCESS [  0.368 s]
[INFO] mod1 ............................................... FAILURE [  2.541 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  3.161 s
[INFO] Finished at: 2020-02-11T13:08:56+01:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project mod1: Compilation failure: Compilation failure:
[ERROR] /C:/Users/egr/eclipse-workspace/demo/mod1/src/main/java/nl/eddy/mod1/Launch.java:[4,26] package javafx.scene.robot does not exist
[ERROR] /C:/Users/egr/eclipse-workspace/demo/mod1/src/main/java/nl/eddy/mod1/Launch.java:[15,21] cannot find symbol
[ERROR]   symbol:   class Robot
[ERROR]   location: class nl.eddy.mod1.Launch
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.

来自 mvn -X compile

日志的编译器详细信息
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T20:41:47+02:00)
Maven home: C:\apps\apache-maven-3.6.0\bin\..
Java version: 12.0.2, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-12.0.2
Default locale: en_US, platform encoding: Cp1252
OS name: "windows server 2012 r2", version: "6.3", arch: "amd64", family: "windows"

一旦我将 maven-compiler-plugin 发布元素的值从 11 更改为 12,编译就顺利进行了。也就是说,与编译器实际 运行 Maven 的值相同。非常感谢@JosePereda,请参阅评论。