У меня есть многомодульный проект Maven, и один из модулей использует JavaFX. Пока все хорошо компилируется в Eclipse,
mvn clean compile
возвращает эту ошибку
package javafx.scene.robot does not exist
Кажется, что maven не может видеть модуль javafx.graphics
который содержит javafx.scene.robot
(но Eclipse видит это, потому что он не дает ошибок компиляции). Как я могу заставить Maven скомпилировать этот код?
Я создал мини-версию своего приложения, которая воспроизводит это. Это файлы:
Main 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();
}
}
module-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:appsapache-maven-3.6.0in..
Java version: 12.0.2, vendor: Oracle Corporation, runtime: C:Program FilesJavajdk-12.0.2
Default locale: en_US, platform encoding: Cp1252
OS name: "windows server 2012 r2", version: "6.3", arch: "amd64", family: "windows"
Всего 1 ответ
Компиляция прошла нормально, как только я изменил элемент выпуска maven-compiler-plugin на значение 12 вместо 11. Т.е., то же значение, что и компилятор, на самом деле работающий с Maven. Большое спасибо @JosePereda, смотрите комментарии.