java - 为什么 Maven 看不到 JavaFX 图形模块(而 Eclipse 有)
问题描述
我有一个多模块 Maven 项目,其中一个模块使用 JavaFX。虽然在 Eclipse 中一切都编译得很好,但做一个
mvn 清理编译
返回此错误
package javafx.scene.robot does not exist
似乎 maven 看不到javafx.graphics
包含的模块javafx.scene.robot
(但 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>
启动.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();
}
}
模块信息.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 发布元素更改为值 12 而不是 11,编译就很好了。即,与实际运行 Maven 的编译器的值相同。非常感谢@JosePereda,请参阅评论。
推荐阅读
- hyperledger-fabric - 在自定义超级账本结构 2.2 中生成排序块创世纪时出错
- windows - 程序启动后扫描文件
- javascript - Laravel - Javascript 编码 html 字符串
- javascript - Javascript:如果对象具有匹配的键,如何用第二个对象的值替换第一个对象的值
- c# - 我可以在多个实现自己的 Vector2 结构的库中使用相同的 Vector2 结构吗?
- c - 潜在的内存溢出,但不确定是什么原因造成的
- python - 在 Django 中查询数据库
- r - 将输入矩阵转换为用累积值替换原始元素的输出
- api - 导入 API 路由
- r - 如何正确地在 RStudio 中进行子集化?