我有一个使用Liberica JDK 13的项目,该项目包含现成的OpenJFX,不需要外部依赖项。对我来说,最重要的功能是Liberica也提供x86构建。
但是,我必须使用Java 11编译项目子模块之一,因为它包含一些我想在Scene Builder中使用的自定义FX组件,不幸的是,Scene Builder仅支持Java 11以及以下的编译类。
这里是module-info
:
module foo {
requires java.logging;
requires java.desktop;
requires static javafx.controls;
requires static javafx.fxml;
exports foo;
}
以及编译器设置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<release>11</release>
</configuration>
</plugin>
我不了解的第一个问题是,如果我使用Java 11编译级别,那么Maven会抱怨找不到Javafx模块:
[ERROR] module not found: javafx.controls
[ERROR] module not found: javafx.fxml
那么,为什么它不抱怨任何其他必需的模块,而只抱怨javafx.*
?那怎么可能JDK模块或...之间没有这种区别。
作为一种解决方法,我尝试将OpenJFX包含为Maven依赖项:
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11</version>
<scope>provided</scope>
</dependency>
没有编译错误,但是现在Intellij抱怨:
Package `foo` reads package `javafx.scene.chart` from both `javafx.controls` and `javafx.controls`
因为它同时从JDK和Maven依赖项中读取javafx.controls
。
有什么办法可以避免这种情况?我知道,最简单的解决方案可能是将问题模块作为一个单独的项目维护,但这正是我要避免的事情。